Skip to content

Instantly share code, notes, and snippets.

@yoheiMune
Last active February 19, 2019 08:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yoheiMune/eaaf74b0903a5d7c3e34ef3255639c91 to your computer and use it in GitHub Desktop.
Save yoheiMune/eaaf74b0903a5d7c3e34ef3255639c91 to your computer and use it in GitHub Desktop.
class Api {
// 省略...
// コメントを取得.
static func getComments(postId: Int, callback: @escaping (String?, [Comment]?) -> Void) {
// APIトークンを取得.
guard let apiToken = UserDefaults.standard.string(forKey: "apiToken") else {
callback("ログインが必要です", nil)
return
}
// URL を作成.
let url = apiRoot + "/api/posts/\(postId)/comments?api_token=" + apiToken
// API呼び出し.
Alamofire.request(url).responseData { dataResponse in
// ネットワーク圏外など.
if dataResponse.result.isFailure {
print(dataResponse.error ?? "")
callback("エラーが発生しました。", nil)
return
}
// ステータスコードが 200 でない場合、エラー.
if dataResponse.response?.statusCode != 200 {
print(dataResponse.result.value ?? "")
callback("サーバーでエラーが発生しました", nil)
return
}
// 成功した場合、サーバーからのレスポンスを受け取る.
guard let data = dataResponse.result.value else {
return
}
// Commentの配列に変換して、返却する.
do {
let comments = try JSONDecoder().decode([Comment].self, from: data)
callback(nil, comments)
} catch {
// 変換でエラーが発生した時.
print(error.localizedDescription)
callback("エラーが発生しました", nil)
}
}
}
}
// Comment.swift
// コメントを表現するクラス.
class Comment: Codable {
let id: Int
let post_id: Int
let user_id: Int
let comment: String
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment