2014-09-01 16 views
15

aşağıdaki hatayı alıyorum: 'Bool' bir alt tür değilSwift - 'Bool' bir 'Void' alt türü değil mi?

performBlock hiçbir argüman ile bir boşluk kapatma alır ve yöntem kendisi, tek bir argüman, bu yüzden kullanmak gerekir 'Void' kapanışım için sözdizimini takip ediyorum. Neden bu derleme hatasını alıyorum? performBlock için

workingManagedObjectContext.performBlock { 
    self.workingManagedObjectContext.save(nil) 

    self.managedObjectContext.performBlock { 
     self.managedObjectContext.save(nil) 
    } 
} 

cevap

27

argüman bir kapama argümansız ve kalkmıştır (yani bir dönüş değeri) kardır. Kapatma, tekli ifade içeriyorsa, döndürme türü, bu ifadenin türüne 'dan türetilmiştir.

self.managedObjectContext.save(nil) 

tipi örtülü Void dönüştürülebilir olamaz Bool vardır. sorunu gidermek için açık bir dönüş deyimi ekleyebilirsiniz:

self.managedObjectContext.performBlock { 
    var error : NSError? 
    if !self.managedObjectContext.save(&error) { 
     // report error 
    } 
} 

(ve yapın:

self.managedObjectContext.performBlock { 
    self.managedObjectContext.save(nil) 
    return 
} 

veya (daha iyi), görmezden gelmek yerine save operasyonun dönüş değerini kontrol dış seviye tasarrufu için aynıdır).


güncelle: Swift 1.2 (Xcode 6.3) itibariyle, Boşluk dönüş türleri ile Açıklama içermeyen tek ekspresyon kapaklar hemen kalkmıştır bağlamlarda kullanılabilir. Yani bu şimdi hatasız derliyor:

self.managedObjectContext.performBlock { 
    self.managedObjectContext.save(nil) 
    // explicit "return" not needed anymore in Swift 1.2 
} 

(. Tabii aslında onay kaydetmek operasyondan dönüş değeri hala iyidir)
İlgili konular