将 Obj-C 块转换为 Swift 用于 AFNetworking 调用

Translating Obj-C blocks into Swift for AFNetworking calls

我正在尝试在 Swift 文档中使用 AFNetworking(这是一个必要的限制,否则我很想学习 AlamoFire)。作为 Swift:

的新手,我正在为在这里做什么而苦苦挣扎
- (nullable AFHTTPRequestOperation *)GET:(NSString *)URLString
                     parameters:(nullable id)parameters
                        success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                        failure:(nullable void (^)(AFHTTPRequestOperation * __nullable operation, NSError *error))failure;

特别是,我不清楚如何处理失败块。这是我的尝试:

manager.GET(
"random_url",
parameters: [...random parameters...],
success: { (operation: AFHTTPRequestOperation!,
responseObject: AnyObject!) in
print("JSON: " + responseObject.description)
},
failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
        print("there was an error")
}
)

我的 failure 块出现错误:

Cannot convert value of type '() -> ()' to expected argument type '((AFHttpRequestOperation?, NSError) -> Void)?'

如果有人能告诉我上面哪里出错了,我将不胜感激。非常感谢。

看来你错过了 "in":

failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
        print("there was an error")
}

我知道错误并不清楚,但我在将我们的 Swift 2 应用程序移植到 Swift 3 时遇到了类似的问题。这个问题,至少对我们来说,是关于闭包中的参数。不是强制解包可选,而是将它们指定为可选类型。换句话说,尝试:

failure: { (operation: AFHTTPRequestOperation?, error: NSError?) in
    print("there was an error")
}

同样,该错误似乎并未表明问题所在,但这正是我们 运行 三个月前针对的问题。