ハマったことシリーズ No15.
今回は、swiftでiOSのバージョンが特定値以上かを判定するお話です。
以下のようなコードで iOS8系か、iOS9系かを判定していました。
しかし、バージョンが 9.1などならいいのですが、9.3.4などとなると Float("9.3.4")というのはFloatに変換できず、nilとなる。 つまり、(nil < 9)の結果として、Flagがtrueとなってしまい、障害の原因となっていました。(see→補足)
最終的には、こんなコードにしました。 これなら安心。
補足:
今回は、swiftでiOSのバージョンが特定値以上かを判定するお話です。
以下のようなコードで iOS8系か、iOS9系かを判定していました。
ios8VersionFlag = Float(UIDevice.currentDevice().systemVersion) < 9
しかし、バージョンが 9.1などならいいのですが、9.3.4などとなると Float("9.3.4")というのはFloatに変換できず、nilとなる。 つまり、(nil < 9)の結果として、Flagがtrueとなってしまい、障害の原因となっていました。(see→補足)
最終的には、こんなコードにしました。 これなら安心。
ios8VersionFlag = UIDevice.currentDevice().systemVersion.compare("9.0.0", options:.NumericSearch ) == .OrderedAscending
補足:
- Float("9.3.4")は optional型で、Float? と 9を比較しています。
- 比較演算子を使うと、optional型の変数は自動的に案ラップされる。
- nilでもエラーにはならず、nilは負の無限大より小さいとして扱われる
0 コメント:
コメントを投稿