Я добавляю новое свойство к существующему набору данных. Мне нужно предпринять корректирующие действия (например, установить его на значение по умолчанию), если значение для этого свойства, которое я получаю из моего сервера Parse.com, не существует. Я рассмотрел различные решения, размещенные здесь, и они не работают, я поставил сообщение об ошибке Xcode как комментарии в приведенном ниже коде. Я пробовал как в Xcode 6.4 и Xcode 7.0 бета-5, как еще один пост предположил, что факультативный NSManaged правильно обрабатывается в Xcode 7.0 Beta 2.Как проверить, является ли @NSManaged свойство нулевым в быстром?
class MyObject: PFObject, PFSubclassing {
@NSManaged private(set) var newPoperty: Bool // No probs here but cannot check nil, see later on..
// @NSManaged private(set) var newProperty: Bool? // ! Property cannot be marked NSManaged as its type cannot be represented in Objective-C
private func initLaterProperties(object: MyObject) {
if (object.newProperty == nil) {//Does not work with following messages
// Xcode 7.0 Beta 5: ! Binary operator '==' cannot be applied to operands of type Bool and nil
// Xcode 6.4: No operator found matching the operands
// Do something
}
if let test = object.newProperty { // Does not work with following message
//! Initializer for conditional binding must have Optional type, not 'Bool'
}
else {
//Do something
}
}
}
Сделать это «NSNumber?» Вместо «Bool?». – matt
@matt: Спасибо, NSNumber? похоже, проходит мимо Xcode linter в 7.0 Beta 5. У меня слишком много быстрых синтаксических изменений 2.0, чтобы выполнить, прежде чем я могу сказать, что он компилируется и запускается. Интересно, почему Bool не работает. Это будет, по-видимому, более эффективным с точки зрения хранения, если оно будет работать. –
Вы уже знаете, почему Bool не работает. Это связано с тем, что необязательный не магически соединен с объектом Objective-C. Но NSNumber является классом Objective-C, и он может хранить логическое значение ('init (bool:)'), поэтому вы можете делать с ним все то же самое. –
matt