L'argomento performBlock
è una chiusura tenendo senza argomenti e ritorno Void (cioè senza valore di ritorno). Se la chiusura consiste in una singola espressione , il tipo di ritorno viene dedotto da il tipo di tale espressione. Il tipo di
self.managedObjectContext.save(nil)
è Bool
, che non può essere implicitamente convertito Void
. Per risolvere questo problema, è possibile aggiungere un return esplicito:
self.managedObjectContext.performBlock {
self.managedObjectContext.save(nil)
return
}
o (meglio), controllare il valore restituito dell'operazione save
invece di ignorarlo:
self.managedObjectContext.performBlock {
var error : NSError?
if !self.managedObjectContext.save(&error) {
// report error
}
}
(e fare il lo stesso per il salvataggio del livello esterno).
Aggiornamento: Come di Swift 1.2 (Xcode 6.3), non annotate chiusure singola espressione con i tipi di ritorno non Void possono ora essere utilizzati in contesti Void. Quindi, questo non ora compilare senza errori:
self.managedObjectContext.performBlock {
self.managedObjectContext.save(nil)
// explicit "return" not needed anymore in Swift 1.2
}
(Naturalmente è ancora meglio in realtà controllo il valore restituito dal l'operazione di salvataggio.)
fonte
2014-09-01 04:41:59