Swift 无法转换类型为';(u)->;()';到预期的参数类型';(()->;())?&x27;
我已将iOS Swift 3应用程序迁移到Swift 4。 我得到: 无法将类型为“(?)->()”的值转换为所需的参数类型“(()->())?” 尝试调用此方法时出错:Swift 无法转换类型为';(u)->;()';到预期的参数类型';(()->;())?&x27;,swift,Swift,我已将iOS Swift 3应用程序迁移到Swift 4。 我得到: 无法将类型为“(?)->()”的值转换为所需的参数类型“(()->())?” 尝试调用此方法时出错: self.aPIManager.registerDeviceId(deviceTokenStr,onSuccess:{ getRegister in }, onError: { message in AppUtility.hideLoading(self.window!) })
self.aPIManager.registerDeviceId(deviceTokenStr,onSuccess:{
getRegister in
},
onError: { message in
AppUtility.hideLoading(self.window!)
})
下面是apimager.registerDeviceId的声明:
open func registerDeviceId(_ deviceId: String, onSuccess successBlock: (() -> ())!, onError errorBlock: ((String?) -> Void)!) {
...
}
在转到Swift 4之前,以下是Swift 3中的相同功能:
open func registerDeviceId(_ deviceId: String, onSuccess successBlock:
(() -> Void)!, onError errorBlock: ((String?) -> Void)!) {
...
}
这是电话:
self.aPIManager.registerDeviceId(deviceTokenStr,onSuccess:{
getRegister in
},
onError: { message in
AppUtility.hideLoading(self.window!)
})
我是斯威夫特的新手。如果您能向我提供有关这种类型的函数声明(声明中没有名称的函数)的一些信息,我将不胜感激。您的success closure没有参数,但您在调用==>onSuccess:{getRegister in…}时使用了它删除
getRegister in
我想知道为什么它不会导致Swift 3中的错误“我想知道为什么它不会导致Swift 3中的错误”问题是Swift 4中的含义代码>已更改。简单。不要使用参数类型中的代码>。如果需要将类型作为可选类型,请使用?
。是一个很好的开始。成功闭包没有参数,但在调用==>onSuccess:{getRegister in…}removegetRegister in
时使用了它。我想知道为什么它不会导致Swift 3出错“我想知道为什么它不会导致Swift 3出错”问题在于Swift 4中的含义代码>已更改。简单。不要使用参数类型中的代码>。如果需要将类型作为可选类型,请使用?
。这是一个很好的开始。