Swift中的HomeKit完成块:无法将表达式的类型'Void'转换为'String!'类型

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)

这给出了编译器错误:

Cannot convert the expression's type 'Void' to type 'String!'
Run Code Online (Sandbox Code Playgroud)

我试过指定一个返回类型Void:

...
{ (error: NSError!, home: HMHome!) -> Void in
...
Run Code Online (Sandbox Code Playgroud)

无济于事.有没有人有任何想法如何解决这个问题?传递nil给完成处理程序修复了错误,但当然我想在完成时做一些事情.

fqd*_*qdn 7

您的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!(因为这是它们出现在方法的签名中的闭包的参数列表中的顺序)