Ik speel met HomeKit en ik probeer een nieuw huis toe te voegen. Dit is mijn code:
func addHome()
{
homeManager.addHomeWithName("My House", completionHandler:
{ (error: NSError!, home: HMHome!) in
if error
{
NSLog("%@", error)
}
})
}
Dit geeft een compilerfout:
Cannot convert the expression's type 'Void' to type 'String!'
Ik heb geprobeerd een retourtype Void
op te geven:
...
{ (error: NSError!, home: HMHome!) -> Void in
...
het mocht niet baten. Heeft iemand enig idee hoe dit op te lossen? Door nil
door te geven aan de voltooiingshandler wordt de fout verholpen, maar ik wil natuurlijk iets doen na voltooiing.
Antwoord 1, autoriteit 100%
De parameters voor uw completionHandler-afsluiting zijn omgekeerd, ze zouden moeten zijn:
(home: HMHome!, error: NSError!)
Houd er ook rekening mee dat u de typen voor de parameters niet hoeft op te geven, aangezien de handtekening van de methode ze voor u heeft gespecificeerd – u kunt dus eenvoudig de parameternamen vermelden die u wilt gebruiken, en ze zullen automatisch worden gegarandeerd het juiste type, bijvoorbeeld:
homeManager.addHomeWithName("My House", completionHandler:{
home, error in
if error { NSLog("%@", error) }
})
—bewerken—
Houd er ook rekening mee dat toen ik ‘u gewoon de parameternamen die u wilt gebruiken, kunt vermelden, dat ze automatisch van het juiste type zijn’, dat wil zeggen dat ze worden getypt in de volgorde waarin ze zijn vermeld – bijv als je in plaats daarvan error, home in
had gebruikt, dan zouden dat je parameternamen zijn, maar de parameter error
zou van het type HMHome!
zijn, en home
zou van het type NSError!
zijn (aangezien dat de volgorde is waarin ze verschijnen in de parameterlijst voor de afsluiting in de handtekening van de methode)
Antwoord 2, autoriteit 10%
Uw argumenten zijn inconsistent geordend; de handtekening voor de completionHandler
in addHomeWithName
is
(HMHome!, NSError!) -> Void
gebruik dus:
homeManager.addHomeWithName ("My House", completionHandler:
{ (home: HMHome!, error: NSError!) in
if error { NSLog("%@", error) }} )
Door een afsluitende afsluiting te gebruiken en de compiler toe te staan de typen af te leiden, kunt u het bovenstaande vereenvoudigen tot:
homeManager.addHomeWithName ("My House") {
if $1 { NSLog ("%@", $1) }
}