Swift 3转换类型的闭包转换问题

时间:2017-01-27 14:13:23

标签: swift swift3

我得到的实际Xcode错误是:

Cannot convert value of type '(AnyObject?, _) -> ()' to expected argument type 'FOSSAPIResponseHandler?'

我定义为FOSSAPIResponseHandler的类型是:

public typealias FOSSAPIResponseHandler = ((_ responseObject: Any?, _ error: NSError?) -> Void)

我使用的方法是:

public func getAccount(responseHandler: FOSSAPIResponseHandler?) {
    ...
}

使用通话时出现错误:

self.networkingClient.getAccount { (responseObject, error) in

}

xcode中的错误显示在.getAccount {in行。

任何帮助都会受到赞赏,因为这是我在转换到Swift 3的动荡时期中在Xcode中看到的最后一个错误。

1 个答案:

答案 0 :(得分:1)

我在干净的游乐场尝试了以下代码:

typealias FOSSAPIResponseHandler = ((_ responseObject: Any?, _ error: NSError?) -> Void)

class NetworkingClient: NSObject {
    func getAccount(responseHandler: FOSSAPIResponseHandler?) {
        guard responseHandler != nil else { return }

        responseHandler!("Cool", nil)
    }
}

let networkingClient = NetworkingClient()

networkingClient.getAccount { (responseObject, error) in
    print (responseObject!)
}

完美运行(在控制台中打印Cool)。因此,它应该是您代码中的其他内容,我们在您共享的几行代码中看不到的内容。 我的第一个猜测是你将响应处理程序存储在NetworkingClient类的某个地方,与此类似:

var responseHandler: FOSSAPIResponseHandler?

请问您是否验证此var使用相同的FOSSAPIResponseHandler类型而不是其他类型?

PS。在任何一种情况下,请在我的操场上添加越来越多的代码,直到您收到错误并与我们分享。