Swiftを使用してJSON応答を取得しようとしています。
リクエストとレスポンスをスニッフィングしました->すべて問題ありません。ただし、戻り値は常にnil
です。
let httpClient = AppDelegate.appDelegate().httpRequestOperationManager as AFHTTPRequestOperationManager;
let path = "/daten/wfs";
let query = "?service=WFS&request=GetFeature&version=1.1.0&typeName=ogdwien:AMPELOGD&srsName=EPSG:4326&outputFormat=json".stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
func successBlock(operation: AFHTTPRequestOperation!, responseObject: AnyObject!) {
println("JSON: " + "\(responseObject)")
}
func errorBlock(operation: AFHTTPRequestOperation!, error:NSError!) {
println("Error: " + error.localizedDescription)
}
let urlString = "\(path)" + "/" + "\(query)"
println("urlString: " + httpClient.baseURL.absoluteString + urlString)
私もこの方法で試しました:
httpClient.GET(urlString, parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
println("Success")
println("JSON: " + "\(responseObject)")
},
failure:{ (operation: AFHTTPRequestOperation!, error:NSError!) -> Void in
println("Failure")
})
...しかし、responseObject
は常にnil
のようです
編集:
おそらくその理由は、私のAppDelegate
の初期化が間違っている可能性があることです。
var httpRequestOperationManager: AFHTTPRequestOperationManager? // Java SERVER Client
class func appDelegate() -> AppDelegate {
return UIApplication.sharedApplication().delegate as AppDelegate
}
func configureWebservice() {
let requestSerializer = AFJSONRequestSerializer()
requestSerializer.setValue("1234567890", forHTTPHeaderField: "clientId")
requestSerializer.setValue("Test", forHTTPHeaderField: "appName")
requestSerializer.setValue("1.0.0", forHTTPHeaderField: "appVersion")
let responseSerializer = AFJSONResponseSerializer()
AFNetworkActivityIndicatorManager.sharedManager().enabled = true
// ##### HTTP #####
let baseURL = NSURL(string: "http://data.wien.gv.at");
httpRequestOperationManager = AFHTTPRequestOperationManager(baseURL: baseURL))
httpRequestOperationManager!.requestSerializer = requestSerializer
httpRequestOperationManager!.responseSerializer = responseSerializer
}
私が間違っていることについて何か提案はありますか?
SwiftのObjective-Cフレームワークとの相互運用性を使用できますが、公式ライブラリがあります。チェックしてみましょう。
https://github.com/Alamofire/Alamofire
このライブラリは、AFNetworkingの作成者によるネイティブSwiftで作成されています。 Swiftに移行するときは、おそらくこの種のものを探したいと思うでしょう。私はそれを試してみました、そしてそれはその前任者のように素晴らしいです。