2016-09-24 3 views
2

저는 스위프트 3과 xcode 8을 사용하고 있습니다. 저는 객관적인 C에 매우 익숙하며 신속하게 새로운 것이므로 어쩌면 바보 같은 질문 일 수 있습니다. 그러나 여기에 간다!Swift 3에 대한 NS_ENUM이 예상대로 작동하지 않습니다.

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

@interface MaplyViewController : MaplyBaseViewController 

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

내 스위프트 3 소스 파일에서 나는 MaplyViewController를 인스턴스화 : 나는 빠른 3. 목적-C에서 브리징있어

여기 목적-C의 코드입니다. 다음은 WORKING 코드 (컴파일되고 실행되며 xcode 오류 없음)입니다.

theViewC = MaplyViewController(mapType: .typeFlat) 

왜이 기능이 작동합니까?

theViewC = MaplyViewController(mapType: .flat) 

을하지만 그 컴파일되지 않습니다 : 참조 https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html 및 기타 참고 문헌에서 나는 올바른 코드가 있어야한다고 생각합니다.

더 자세한 정보는 Amin Negm-Awad가 아래에서 그의 설명에 거의 설명했습니다. 식별자 .3D는 허용되지 않으므로 간단한 브리징 규칙을 사용하여 식별자 .flat 및 .3D를 생성 할 수 없습니다. language reference에는 "식별자는 대문자 또는 소문자 A부터 Z, 밑줄 (_), 기본 다국 언어 평면의 조합되지 않는 영숫자 유니 코드 문자 또는 개인 사용 영역이 아닌 기본 다국어 평면 외부의 문자로 시작됩니다 첫 번째 문자 뒤에는 숫자와 결합 유니 코드 문자도 허용됩니다. "

따라서 브리징으로 인해 열거 형 식별자 인 .flat 및 .3d를 사용할 수 없습니다. 나는 브리징 규칙을 사용하여 대체 식별 정보, 즉이 경우 .typeFlat 및 .type3D를 찾아내는 규칙을 설명하는 참조를 찾을 수 없습니다.

답변

1

다른 식별자 (MaplyMapType3D)는 대신 3D이 되겠지만 식별자는 숫자로 시작하지 않아야합니다. 그래서 사람은 type을 유지해야합니다.

관련 문제