LoginSignup
79
68

More than 5 years have passed since last update.

[Swift] 三項演算子のハマり所

Last updated at Posted at 2014-07-20

bool値による分岐

okの例
var boolValue = true
var ret1 = boolValue ? "a" : "b"    // ret1 = "a"
var ret2 = !boolValue ? "a" : "b"   // ret2 = "b"
  • 論理否定演算子「!」もC, Objective-Cと同じように使えます。
構文エラーの例
var boolValue = true
var ret1 = boolValue? "a" : "b"    // 構文エラー
var ret2 = !boolValue? "a" : "b"   // 構文エラー
  • 変数名の直後に半角スペースを置かずに?をつけると、「オプショナル型の宣言」と解釈されるためエラーになる。
  • 三項演算子の場合は?の前に半角スペースを忘れずに

nilかどうかによる分岐

okの例
var stringValue : String? = "hogehoge" // Optional型
var ret = stringValue ? "a" : "b" // ret = "a"
stringValue = nil
var ret2 = stringValue ? "a" : "b" // ret = "b"
構文エラーの例
var stringValue : String = "hogehoge" // Optional型ではない
var ret = stringValue ? "a" : "b" // 構文エラー: Type 'String' does not conform to protocol 'LogicalValue'
  • 評価に使う値がOptional型か否かによって挙動が異なる。
  • Optional型の場合、nilの場合はfalse、nil以外はtrueと評価される。
  • Optional型ではない場合は構文エラー。Optional型ではない値は、true/falseの評価には使えない。

文字列一致による分岐

okの例
var stringValue : String = "hogehoge"
var ret1 = stringValue == "hogehoge" ? "a" : "b" // ret1 = "a"
var ret2 = stringValue == "Hogehoge" ? "a" : "b" // ret2 = "b"
  • 値が等しいか判断する"=="演算子は大文字小文字を区別します

まとめ

  • Swiftの三項演算子はCやObje-Cと同じように使えますが、Optionalの?には注意しましょう。
  • 例によって、気になる点がありましたら気軽にコメントください!
79
68
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
68