2

SwiftyJSON https://github.com/SwiftyJSON/SwiftyJSONは本当に有望に見えます。Alamofireただし、手順は(AFNetworking for Swift)との統合についてのみ説明しています。ただし、現在のプロジェクトの性質上、既に を使用しており、 にAFNetworking2切り替えることはできませんAlamofire。ただし、との統合AFNetworkingに問題がありSwiftyJSONます。

responseObject次のコード ブロックがあります。にダウンキャストできる を でNSDictionary定義されている JSON オブジェクトに変換するにはどうすればよいSwiftyJSONですか? 以下のコードは機能しません。

        let task:NSURLSessionDataTask = AFHTTPSessionManager.GET(
            url,
            parameters: params,
            success: { (task: NSURLSessionDataTask!, responseObject: AnyObject!) in

                dispatch_async(dispatch_get_main_queue(), {

                    // How do I convert responseObject, which can be downcasted to NSDictionary to a JSON object?
                    let data = JSON(data: responseObject)
                    completion(task: task, response: data as JSON!, error: nil)
                })
            },
            failure: { (task: NSURLSessionDataTask!, error: NSError!) in
                dispatch_async(dispatch_get_main_queue(), {
                    completion(task: task, response: nil, error: error)
                })
            }
        )
4

1 に答える 1

3

まず、メイン キューにディスパッチする必要はありません。AFNetworking は、メイン スレッドでこれらのブロックを既に呼び出しています。

使用している初期化子は、JSON オブジェクトではなく、データを期待しています。

あなたは現在、この初期化子を使用していますNSData

let json = JSON(data: dataFromNetworking)

代わりに、次の初期化子を使用する必要があります。

let json = JSON(jsonObject)

ここを通すとSwiftyJSONがうまく動作しますresponseObject


もう 1 つの注意: このコードは完了ブロックには属しません。AFNetworking の設計では、サーバーの応答を処理する応答シリアライザーを作成する必要があります。AFJSONResponseSerializerSwiftyJSON を使用するには、ソースを参照して移植することをお勧めします。

于 2014-10-25T22:57:30.113 に答える