Аргумент performBlock
является замыканием не принимает никаких аргументов и не возвращаются Пустоты (т.е. возвращаемого значения). Если замыкание состоит из одного выражения , тип возвращаемого значения определяется из типом этого выражения. Тип
self.managedObjectContext.save(nil)
является Bool
, который не может неявно быть преобразованы в Void
. Чтобы решить эту проблему, вы можете добавить явный обратный оператор:
self.managedObjectContext.performBlock {
self.managedObjectContext.save(nil)
return
}
или (лучше), проверьте возвращаемое значение save
операций вместо того, чтобы игнорировать его:
self.managedObjectContext.performBlock {
var error : NSError?
if !self.managedObjectContext.save(&error) {
// report error
}
}
(и делать то же самое для сохранения внешнего уровня).
Обновление: По состоянию Swift 1.2 (Xcode 6.3), Неаннотированные одной экспрессирующих затворы с типами без возврата Пустоты теперь могут быть использованы в недействительных контекстах. Так что это компилировать без ошибок:
self.managedObjectContext.performBlock {
self.managedObjectContext.save(nil)
// explicit "return" not needed anymore in Swift 1.2
}
(Конечно, это еще лучше, на самом деле проверка возвращаемое значение от операции сохранения.)