2016-09-24 1 views
2

Ich benutze Swift 3 und xcode 8. Ich bin neu bei objective-C und ziemlich neu bei swift, also ist das vielleicht eine Idiotfrage. Aber hier geht es!NS_ENUM zu Swift 3 funktioniert nicht wie erwartet

Ich bin von Objective-C zu schnellen 3. Überbrückung Hier ist ein Code-Snippet des Objective-C:

typedef NS_ENUM(NSInteger, MaplyMapType) { 
    MaplyMapType3D, 
    MaplyMapTypeFlat, 
}; 

@interface MaplyViewController : MaplyBaseViewController 

/// @brief Initialize as a flat or 3D map. 
- (nonnull instancetype)initWithMapType:(MaplyMapType)mapType; 

In meiner Swift 3-Quelldatei ich ein MaplyViewController instanziiert. Das Folgende ist der WORKING-Code (kompiliert und läuft, und keine xcode-Fehler).

theViewC = MaplyViewController(mapType: .typeFlat) 

Warum funktioniert das? Von Referenzen https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html und anderen Referenzen denke ich, der richtige Code sein sollte:

theViewC = MaplyViewController(mapType: .flat) 

Aber das wird nicht kompilieren.

MEHR INFO VON EINEM TAG SPÄTER: Amin Negm-Awad in seinem Kommentar unten hat dies fast erklärt. Die einfachen Überbrückungsregeln können nicht verwendet werden, um die Bezeichner .flat und .3D zu erzeugen, da Bezeichner .3D nicht erlaubt ist. Die language reference sagt "Bezeichner beginnen mit einem Großbuchstabe oder Kleinbuchstaben A bis Z, einem Unterstrich (_), einem nichtkombinierenden alphanumerischen Unicode-Zeichen in der Basic Multilingual Plane oder einem Zeichen außerhalb der Basic Multilingual Plane, das sich nicht in einem privaten Verwendungsgebiet befindet Nach dem ersten Zeichen sind auch Ziffern und die Kombination von Unicode-Zeichen erlaubt. "

So kann die Überbrückung nicht Enum Bezeichner .flat und .3d ergeben. Ich konnte keinen Hinweis finden, um die Regeln zu erklären, die die Verwendung der Alternativen identifizieren, nämlich .typeFlat und .type3D in diesem Fall.

Antwort

1

Wahrscheinlich ist es, weil der andere Bezeichner (MaplyMapType3D) wäre 3D anstelle von type3D, aber Kennungen dürfen nicht mit einer Ziffer beginnen. Also muss man type behalten.

Verwandte Themen