2014-10-06 2 views
2

Я получаю следующее сообщение об ошибке при попытке сравнения значений, полученных от NSPersistentStoreCoordinatorStoresDidChangeNotification с помощью этогоКак для сравнения NSPersistentStoreUbiquitousTransitionType значения перечислений

// Check type of transition 
if let type = n.userInfo?[NSPersistentStoreUbiquitousTransitionTypeKey] as? UInt { 

    FLOG(" transition type is \(type)") 

    if (type == NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted) { 
      FLOG(" transition type is NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted") 
    } 

} 

Но я получаю следующую ошибку компилятора

NSPersistentStoreUbiquitousTransitionType is not convertible to UInt 

Просто, когда я думаю, У меня есть вихрь Свифта, я снова запнулся!

ответ

3

Это редкий случай, когда компилятор фактически сообщает вам, что именно не так! type - UInt, а NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted - один случай перечисления. Для того, чтобы сравнить их вы должны получить их на той же странице - это, вероятно, самый безопасный, чтобы получить сырое значение перечисления:

if (type == NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted.toRawValue()) { 
    FLOG(" transition type is NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted") 
} 

Примечание: в Xcode 6.1, перечислений немного изменились, так что вы 'd использовать .rawValue вместо .toRawValue().

Чтобы справиться с этим другим способом, вам нужно будет преобразовать данные из уведомления в значение перечисления. В документации говорится: «Соответствующее значение является одним из значений перечисления NSPersistentStoreUbiquitousTransitionType как объекта NSNumber». Таким образом, первая часть кода является только право, а затем вам нужно использовать fromRaw(number) статический метод перечисления в:

if let type = n.userInfo?[NSPersistentStoreUbiquitousTransitionTypeKey] as? Uint { 
    // convert to enum and unwrap the optional return value 
    if let type = NSPersistentStoreUbiquitousTransitionType.fromRaw(type) { 
     // now you can compare directly with the case you want  
     if (type == .InitialImportCompleted) { 
      // ... 
     } 
    } 
} 

Примечание: в Xcode 6.1, вы бы использовать NSPersistentStoreUbiquitousTransitionType(rawValue: type) вместо fromRaw() способ.

+0

Спасибо, правильно ли я получаю значение из userInfo как Uint или есть лучший способ делать то, что не нужно для получения необработанного значения? –

+0

Обновлен мой ответ более –

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