productos kit homepod home español con compatibles compatible codigo apple agregar ios closures swift homekit

ios - homepod - Bloque de finalización de HomeKit en Swift: No se puede convertir el tipo de expresión ''Void'' para escribir ''String!''



homekit iphone (2)

Los parámetros para su finalización El cierre del manejador se invierten, deberían ser:

(home: HMHome!, error: NSError!)

También tenga en cuenta que no necesita especificar los tipos para los parámetros, ya que la firma del método los especificó para usted, por lo que puede simplemente enumerar los nombres de los parámetros que desea usar, y se les asegurará automáticamente que sean del tipo correcto , por ejemplo:

homeManager.addHomeWithName("My House", completionHandler:{ home, error in if error { NSLog("%@", error) } })

- editar -

También tenga en cuenta que cuando escribí ''puede simplemente enumerar los nombres de parámetros que desea usar, y se les garantizará automáticamente que sean del tipo correcto'' , es decir, se escribirán de acuerdo con el orden en que aparecen en la lista, por ejemplo, si utilizó el error, home in lugar, esos serían sus nombres de parámetros; sin embargo, el error del parámetro sería de tipo HMHome! , y el home sería del tipo NSError! (ya que ese es el orden en que aparecen en la lista de parámetros para el cierre en la firma del método)

Estoy jugando con HomeKit, y estoy tratando de agregar un nuevo hogar. Este es mi código:

func addHome() { homeManager.addHomeWithName("My House", completionHandler: { (error: NSError!, home: HMHome!) in if error { NSLog("%@", error) } }) }

Esto da un error de compilación:

Cannot convert the expression''s type ''Void'' to type ''String!''

Intenté especificar un tipo de devolución de Void :

... { (error: NSError!, home: HMHome!) -> Void in ...

en vano. ¿Alguien tiene alguna idea de cómo solucionar esto? Pasar nil al controlador de finalización corrige el error, pero por supuesto quiero hacer algo al finalizar.


Tus argumentos están ordenados de manera inconsistente; la firma para el addHomeWithName en addHomeWithName es

(HMHome!, NSError!) -> Void

así usar:

homeManager.addHomeWithName ("My House", completionHandler: { (home: HMHome!, error: NSError!) in if error { NSLog("%@", error) }} )

Usar un cierre final y permitir que el compilador deduzca los tipos le permite simplificar lo anterior para:

homeManager.addHomeWithName ("My House") { if $1 { NSLog ("%@", $1) } }