2014-06-22 14 views
27

HomeKit ile oynuyorum ve yeni bir ev eklemeye çalışıyorum. Bu derleyici hata veriyorHomeKit in Swift'deki tamamlanma bloku: İfadenin 'Void' türünü 'String!' Olarak yazamazsınız.

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

: Ben Void bir dönüş türünü belirten denedim

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

: boşuna

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

Bu benim kodudur. Bunu düzeltmek için herhangi bir fikri olan var mı? Tamamlama işleyicisine nil geçişi hatayı düzeltir, ancak elbette tamamlandığında bir şey yapmak istiyorum.

cevap

5
addHomeWithName yılında completionHandler için imza

böylece
(HMHome!, NSError!) -> Void 

kullanmaktır

TamamlamaHandler kapanışı için parametreler tersine çevrilir, şu şekilde olmalıdır:

(home: HMHome!, error: NSError!) 

Ayrıca, yöntem imzalarının sizin için belirttiğinden, parametrelerin türlerini belirtmeniz gerekmediğini de unutmayın. Böylece, kullanmak istediğiniz parametre adlarını basitçe listeleyebilirsiniz ve otomatik olarak örneğin, doğru tipte: -düzenleme -

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

Ayrıca ben 'yazdığında sadece kullanmak istediğiniz parametre adları listeleyebilirsiniz unutmayın ve yapacaklar otomatik olarak doğru tipte olduğundan emin olabilirsiniz ', yani listelendikleri sıraya göre yazılacaklarını - örn. Bunun yerine error, home in kullanmış olsaydınız, error parametresi HMHome! türünde olurdu ve home türünde olurdu, çünkü bu, parametre adlarında olurdu. yöntem imzası)

1

Argümanlarınız tutarsız olarak sıralanır;

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

türlerini anlaması için derleyici bir eğik kapatılmasını kullanma ve izin sen yukarıdaki basitleştirmek sağlar:

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