2016-07-14 13 views
0

Ich habe diese NS_ENUM genannt ObserveType mit zwei Eigenschaften namens Observe und ObserveAll. Ich kann auf die ObserveAll Eigenschaft zugreifen, wie Sie aus dem Bild sehen können, aber ich kann Observe nicht zugreifen.Zugriff auf NS_ENUM von Objective-C in Swift

Das NS_ENUM befindet sich in einer Headerdatei von Objective-C.

Ich weiß, dass Observe-ObserveX oder ObserveXYZ Wechsel arbeiten. Wie kann ich auf Observe zugreifen, ohne den Namen des Observe zu ändern?

Beachten Sie, dass ich auf die Observe auf Swift zugreifen muss.

enter image description here

Antwort

0

Von Language Guide - Interoperability - Interacting with C APIs:

„Die Präfixe C Aufzählung Fall Namen entfernt werden, wenn sie in Swift importiert werden, ob sie in Systemrahmen oder in benutzerdefinierten Code definiert sind. "

Dies bedeutet, dass Ihr erster Fall, in dem ObserveType Enum hat keinen Namen nach zu Swift importiert werden (was ich ein wenig überrascht bin keinen Compiler-Fehler ergeben). Wenn wir aus der Umwandlung zu drucken, wäre es etwa so aussieht (gedanklich)

typedef NS_ENUM(NSInteger, ObserveType) { 
    Observe = 0 
    ObserveAll = 1 
}; 

// imported like ... 
enum ObserveType: Int { 
    case _ = 0 // obviously illegal if applied directly in Swift 
    case All 
} 

Sie könnten versuchen, den namenlosen Fall zugreifen, indem er mit seinem rawValue (0), aber ich würde empfehlen, den Namen der ersten Aktualisierung Fall in Ihrer Obj-C enum, wenn möglich.

if let empty = ObserveType(rawValue: 0) { 
    print(empty) // prints ""? 
} 
0

dfri ‚s Antwort ist vor Ort auf, und auf seiner Antwort zu erweitern, ist es wahrscheinlich am besten, die Enum und seine Fälle nach den weit verbreiteten Konventionen zu nennen. Im folgenden Code mache ich bestimmte Vermutungen über Ihre Absicht.

typedef NS_ENUM(NSUInteger, XYZObserveType) { 
    XYZObserveOne, 
    XYZObserveAll 
} 

Noch ein Tipp, dass ich nützlich finden, wenn die Arbeit mit Projekten enthalten sowohl Swift und Objective-C-Code Generated Interface im Quelltexteditor ist.

Wenn Sie eine Objective-C-Klasse anzeigen, wird bei Auswahl dieser Option der generierte Swift-Header angezeigt, der bei vielen Gelegenheiten hilfreich sein kann.

Verwandte Themen