Dies ist der seltene Fall, in dem der Compiler Ihnen tatsächlich genau sagt, was falsch ist! Typ
ist ein UInt
, während NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted
ein Fall von Enum ist. Um sie zu vergleichen, müssen Sie sie auf die gleiche Seite bringen - es ist wahrscheinlich am sichersten, den Rohwert des Enums zu erhalten:
if (type == NSPersistentStoreUbiquitousTransitionType.InitialImportCompleted.toRawValue()) {
FLOG(" Übergangstyp ist NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted")
}
Hinweis: in Xcode 6.1 haben sich Enums geringfügig geändert, daher würden Sie .rawValue
anstelle von .toRawValue()
verwenden.
Um es andersherum zu behandeln, müssten Sie die Daten aus der Benachrichtigung in einen Enum-Wert konvertieren. Die Dokumentation besagt: "Der entsprechende Wert ist einer der NSPersistentStoreUbiquitousTransitionType Enum-Werte als NSNumber-Objekt." Der erste Teil Ihres Codes ist also genau richtig, und dann müssten Sie die statische Methode fromRaw(number)
des Enums verwenden:
if let type = n.userInfo?[NSPersistentStoreUbiquitousTransitionTypeKey] as? Uint {
// Konvertieren in ein Enum und den optionalen Rückgabewert auspacken
if let type = NSPersistentStoreUbiquitousTransitionType.fromRaw(type) {
// Jetzt können Sie direkt mit dem gewünschten Fall vergleichen
if (type == .InitialImportCompleted) {
// ...
}
}
}
Hinweis: in Xcode 6.1 würden Sie NSPersistentStoreUbiquitousTransitionType(rawValue: type)
anstelle der Methode fromRaw()
verwenden.