2015-08-07 3 views
1

Я добавляю новое свойство к существующему набору данных. Мне нужно предпринять корректирующие действия (например, установить его на значение по умолчанию), если значение для этого свойства, которое я получаю из моего сервера 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 


} 
} 

} 
+1

Сделать это «NSNumber?» Вместо «Bool?». – matt

+0

@matt: Спасибо, NSNumber? похоже, проходит мимо Xcode linter в 7.0 Beta 5. У меня слишком много быстрых синтаксических изменений 2.0, чтобы выполнить, прежде чем я могу сказать, что он компилируется и запускается. Интересно, почему Bool не работает. Это будет, по-видимому, более эффективным с точки зрения хранения, если оно будет работать. –

+0

Вы уже знаете, почему Bool не работает. Это связано с тем, что необязательный не магически соединен с объектом Objective-C. Но NSNumber является классом Objective-C, и он может хранить логическое значение ('init (bool:)'), поэтому вы можете делать с ним все то же самое. – matt

ответ

2

Поскольку это должно быть Objective-C-совместимая недвижимость , сделайте то, что вы бы сделали, если бы вы написали этот код в Objective-C! В Objective-C Bool не может быть nil - это не объект. Вместо этого вы должны использовать NSNumber, который имеет методы для хранения логических значений (init(bool:)) и для извлечения логических значений (boolValue). Поэтому сделайте это NSNumber? и соответствующим образом отредактируйте остальную часть кода.

Смежные вопросы