swiftでjsonを扱うときは、SwiftyJSONというライブラリを利用するのが一般的です。
ところがこのライブラリでどはまりしました。というわけでメモ
環境
- Xcode Version 6.1 (6A1052d)
SwiftyJSONを取得
CocoaPodsでswiftが利用できるのはCocoaPods 0.36からです。私の環境ではまだ0.35なのでgit submoduleで取得します。
// プロジェクトフォルダへ移動 cd /Users/{username}/Documents/swiftworkspace/{projectFolder} // サブモジュールとして取得する git submodule add https://github.com/SwiftyJSON/SwiftyJSON.git // SwiftyJSONディレクトリを開く // SwiftyJSON.xcodeprojをproject treeに移動させる // ビルド // Target DependenciesでswiftyJSONを選択
以上で準備完了です。画像を以下に貼り付けておきます。
Alamofireで取得したjsonを取得するサンプルコード(間違い)
import UIKit import Alamofire import SwiftyJson Alamofire.request(.GET, "http://test.com/api/v1/math", parameters: ["offset": 0, "limit": 1, "student_id": 1]) .responseJSON { (request, response, data, error) in if (response?.statusCode == 200) { println("success") let json = JSON(data!) println(json) } else { // error println(error) } }
上記のコードを書くとコンパイルは通ります。しかし、シュミレーターを起動すると、swiftyjson linker command failedエラーで動かなくなります。
正しい実装は以下の通り。
Alamofireで取得したjsonを取得するサンプルコード(正しい)
import UIKit import Alamofire import SwiftyJson Alamofire.request(.GET, "http://test.com/api/v1/math", parameters: ["offset": 0, "limit": 1, "student_id": 1]) .responseJSON { (request, response, data, error) in if (response?.statusCode == 200) { println("success") let json = SwiftyJSON.JSON(data!) println(json) } else { // error println(error) } }
JSONをSwiftyJSON.JSONに変更するときちんと動作します。
これだけのことなのに、すごくはまってしまいました。
以上
0 件のコメント:
コメントを投稿