Swift 2 Swift 3:无法将类型'(Data?,NSError?) - > Void'的值转换为期望的参数类型'GTMSessionFetcherCompletionHandler?'
我刚刚更新工作斯威夫特2斯威夫特3节目,而我得到的错误,Swift 2 Swift 3:无法将类型'(Data?,NSError?) - > Void'的值转换为期望的参数类型'GTMSessionFetcherCompletionHandler?'
无法将类型的值“(数据?NSError?) - >虚空”预期参数类型“GTMSessionFetcherCompletionHandler ?
下面是有关细节(希望):
let fetcher = GTMSessionFetcher(urlString:url)
fetcher.authorizer = parentController.service.authorizer
fetcher.beginFetch(completionHandler: handleDownload(studentNum))
^^^^ causing the error
用于completionHandler功能:
func handleDownload(_ studentNum:Int) -> (Data?, NSError?) -> Void {
return { (data: Data?, error: NSError?) -> Void in
// code for function
}
}
GTMSessionFetcherCompletionHandler
在一个Objective-C标题中定义的,如下所示:
#define GTM_NULLABLE_TYPE __nullable
typedef void (^GTMSessionFetcherCompletionHandler)(NSData * GTM_NULLABLE_TYPE data,
NSError * GTM_NULLABLE_TYPE error);
我试过改变韩dleDownload()以下:
func handleDownload(_ studentNum:Int) -> (GTMSessionFetcherCompletionHandler?) {
return { (data: Data?, error: NSError?) -> Void in
// code for function
}
}
但移动误差降到这个功能:“无法将类型的返回表达式‘(?数据?NSError) - >虚空’返回类型“GTMSessionFetcherCompletionHandler? “
我无法弄清楚如何保留curried(?)数据和错误变量,并进行编译。
按照SE-0112,NSError
现在桥接到Swift作为Error
协议。事实上,如果你⌥ +点击在斯威夫特的GTMSessionFetcherCompletionHandler
类型,你会清楚地看到它是如何桥接:
typealias GTMSessionFetcherCompletionHandler = (Data?, Error?) -> Void
所以你只需要改变你的handleDownload(_:)
的签名,以反映这一点:
func handleDownload(_ studentNum:Int) -> (Data?, Error?) -> Void {
return { (data: Data?, error: Error?) -> Void in
// code for function
}
}
WORequestManager.shared().genericRequest(withMethod: "GET", webserviceName: walletAPI, andParameters: params, showLoading: true, success: { (responseDictionary: [AnyHashable: Any]?) in
}, failure: { (error: Error?) in
})
尽管这段代码可能会回答这个问题,但它没有提供任何上下文来解释如何或为什么。考虑增加一两句话来解释你的答案。 – brandonscript
啊 - 我明白了。选项点击技巧也很好! –
我应该添加 - 这也影响了我的代码的其他部分 - 我强迫一些代码使用NSError,并导致运行时错误。没有你的反应,我不会想出运行时错误。所以谢谢! –
@ChrisGregg乐意帮忙:) – Hamish