AFNetworking和Swift

use*_*342 13 json ios afnetworking swift

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

我也这样试过:

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")
    })
Run Code Online (Sandbox Code Playgroud)

......但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
}
Run Code Online (Sandbox Code Playgroud)

我有什么错误吗?

aka*_*kyy 8

斯威夫特是Objective-C代码完全兼容,所以你的问题是不是与雨燕本身连接.在AFNetworking中,responseObject 可以有时会nil.这包括案例,其中:

  • 一个204 No Content状态代码返回,
  • 如果输出流设置为写入文件,
  • 如果验证期间的错误不是NSURLErrorCannotDecodeContentData(例如不可接受的内容类型)

有关更多信息,请查看#740#1280.


Thi*_*yen 6

您可以使用Swift与Objective-C框架的互操作性,但现在有一个官方库,让我们看一下:

https://github.com/Alamofire/Alamofire

这个库是用AFNetworking的创建者编写的原生Swift编写的.转移到Swift时,你可能想要寻找这种东西.我尝试了它,它很棒,就像它的前任一样.