2015年1月22日木曜日

swift SwiftyJSONではまった件

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 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...