Smo*_*tor 39 closures ios swift homekit
我正在玩HomeKit,我正在尝试添加一个新家.这是我的代码:
func addHome()
{
homeManager.addHomeWithName("My House", completionHandler:
{ (error: NSError!, home: HMHome!) in
if error
{
NSLog("%@", error)
}
})
}
Run Code Online (Sandbox Code Playgroud)
这给出了编译器错误:
Run Code Online (Sandbox Code Playgroud)Cannot convert the expression's type 'Void' to type 'String!'
我试过指定一个返回类型Void
:
...
{ (error: NSError!, home: HMHome!) -> Void in
...
Run Code Online (Sandbox Code Playgroud)
无济于事.有没有人有任何想法如何解决这个问题?传递nil
给完成处理程序修复了错误,但当然我想在完成时做一些事情.
您的completionHandler闭包的参数是相反的,它们应该是:
(home: HMHome!, error: NSError!)
Run Code Online (Sandbox Code Playgroud)
另请注意,您不需要指定参数的类型,因为方法签名为您指定了它们 - 因此您只需列出要使用的参数名称,它们将自动确保为正确的类型, 例如:
homeManager.addHomeWithName("My House", completionHandler:{
home, error in
if error { NSLog("%@", error) }
})
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
还要注意,当我写"你可以简单地列出你想要使用的参数名称时,它们将自动被确保为正确的类型",也就是说它们将根据它们的顺序键入列出 - 例如,如果您使用了error, home in
,那么那些将是您的参数名称,但参数error
将是类型HMHome!
,并且home
将是类型NSError!
(因为这是它们出现在方法的签名中的闭包的参数列表中的顺序)