2017-10-31 4 views
2

nilを返しません:列挙は、私が遊び場(Xcodeの9.0.1)に次のコードを持って失敗し、

import MapKit 

enum Test: UInt { 
    case first 
    case second 
    case third 
} 

let test = Test(rawValue: 4) as Any 
print(test)   // nil 

let type = MKMapType(rawValue: 999) 
print(type == nil) // false 
print(type!.rawValue) // 999 

はMKMapTypeは

enum MKMapType : UInt 

として定義されますMKMapTypeの最大値が5であるため、enumの初期化子が失敗してnilを返すことが予想されます。代わりに999が返されます。ここにObjC/Swiftブリッジがないか、これがバグでしょうか?

答えて

0

私はAppleとバグを提出し、これは私が受け取った応答である:

「エンジニアリングは、以下の情報に基づいて、意図したとおり、この問題が動作することを決定しました:

Cの列挙型が値を持っている可能性があるため将来のリリースで追加されたり、ヘッダーに含まれていないフレームワークで使用される「プライベートケース」値を持つ場合でも、Swiftで提供される値が実際に有効であるか無効であるかを確認する方法はありません。init(rawValue:)は、 Cキャストと同じように価値があります。この状況を改善する方法については、Swift Open Sourceプロジェクトで議論がありますSwiftのそれ以降のバージョンではオンになっていますが、MKMapTypeのイニシャライザはまだnilを返しません。

この説明については、Apple Engineeringに感謝します。

関連する問題