私はSwift 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をインスタンス化:私はSWIFT 3に客観-Cからブリッジてる
は、ここでのObjective-Cのコードスニペットです。以下はWORKINGコードです(コンパイルして実行し、xcodeエラーは発生しません)。
theViewC = MaplyViewController(mapType: .typeFlat)
これはなぜ機能しますか?
theViewC = MaplyViewController(mapType: .flat)
しかし、それはコンパイルされません:参照https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.htmlおよび他の参考文献から私は正しいコードがあるべきだと思います。
1日後の詳細情報: Amin Negm-Awad氏が以下の彼のコメントでほぼ説明しています。識別子.3Dは使用できないため、単純なブリッジング規則を使用して識別子.flatおよび.3Dを生成することはできません。 language referenceには、「識別子は大文字または小文字のA〜Z、アンダースコア(_)、基本多言語面の英数字ユニコード文字、またはプライベート使用領域にない基本多言語面外の文字で始まります最初の文字の後に、数字と組み合わせのUnicode文字も許可されます。 "
したがって、ブリッジは列挙型識別子.flatおよび.3dになりません。この場合、.typeFlatと.type3Dという代替識別情報を思い付くために使用する規則を説明するための参照が見つかりませんでした。