代入演算子
let b = 10 var a = 5 a = b // タプル let (x, y) = (1, 2
算術演算子
Swiftは、すべての数値タイプに対して4つの標準算術演算子をサポートしています。
- 加算(
+
) - 減算(
-
) - 乗算(
*
) - 除算(
/
)
CおよびObjective-Cの算術演算子とは異なり、Swift算術演算子では、デフォルトで値がオーバーフローすることはない。
文字列も加算可能。
“hello, ” + “world”
剰余演算子
a % b
9 % 4 // equals 1 -9 % 4 // equals -1
単項マイナス演算子
let three = 3 let minusThree = -three // -3
単項プラス演算子
let minusSix = -6 let alsoMinusSix = +minusSix // 単項プラス演算子は実際には何もしません
複合代入演算子
var a = 1 a += 2 // 3 let b = a += 2 // エラー。複合代入演算子は値を返さないので、エラーになる。
比較演算子
a == b // 等しい a != b // 等しくない a > b // より大きい a < b // より小さい a >= b // 以上 a <= b // 以下
Swiftには2つのID演算子(===
および!==
)も用意されている。これを使用して、2つのオブジェクト参照が両方とも同じオブジェクトインスタンスを参照しているかどうかをテストできる。詳細については、「アイデンティティオペレーター」を参照。
タプルの比較
2つのタプルのタイプと値の数が同じである場合、比較できる。
タプルは、比較で2つの値が等しくないことが見つかるまで、左から右に、一度に1つの値が比較されます。これらの2つの値が比較され、その比較の結果がタプル比較の全体的な結果となる。
(1, "zebra") < (2, "apple") // true // 1 < 2 なので比較を終了、"zebra" と "apple" は比較されない (3, "apple") < (3, "bird") // true // 3==3 なので比較を継続、"apple" < "bird" (4, "dog") == (4, "dog") // true // 4==4 なので比較を継続、"dog" == "dog" ("blue", -1) < ("purple", 1) // true ("blue", false) < ("purple", true) // エラー。ブーリアンを比較できない。
注意
Swift標準ライブラリには、7要素未満のタプル用のタプル比較演算子が含まれています。7つ以上の要素を持つタプルを比較するには、比較演算子を自分で実装する必要がある。
三項条件乗演算子
question ? answer1 : answer2questionquestionanswer1answer2
三項条件演算子は、以下のコードの省略形です。
if question { answer1 } else { answer2 } // 例 let hasHeader = true let rowHeight = hasHeader ? 50 : 20 // rowHeight is equal to 50
nil結合演算子
a ?? b
a が nil でなければ アンラップしたaの値、aがnilであれば bを返す。
式は常にオプショナルタイプ。
nil 結合演算子は、以下のコードの省略形です。
a != nil ? a! : b
注意
aの値がnilではない場合、b の値は評価されません。
範囲演算子
Closed Range 演算子
a…b
for index in 1...5 { print("\(index) times 5 is \(index * 5)") } // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25
Half-Open Range 演算子
a..<b
let names = ["Anna", "Alex", "Brian", "Jack"] let count = names.count for i in 0..<count { print("Person \(i + 1) is called \(names[i])") } // Person 1 is called Anna // Person 2 is called Alex // Person 3 is called Brian // Person 4 is called Jack
One-Sided Ranges 演算子
for name in names[2...] { print(name) } // Brian // Jack for name in names[...2] { print(name) } // Anna // Alex // Brian for name in names[..<2] { print(name) } // Anna // Alex let range = ...5 range.contains(7) // false range.contains(4) // true range.contains(-1) // true
論理演算子
Swiftは、Cベースの言語にある3つの標準論理演算子をサポートしています。
- 論理否定 !a
- 論理AND a && b
- 論理OR a || b
論理否定演算子
論理否定演算子は !a のようにブール値を反転する。
論理AND演算子
a && b
最初の値がのfalse
場合、2番目の値は評価されません。
let enteredDoorCode = true let passedRetinaScan = false if enteredDoorCode && passedRetinaScan { print("Welcome!") } else { print("ACCESS DENIED") } // Prints "ACCESS DENIED"
論理OR演算子
a || b
let hasDoorKey = false let knowsOverridePassword = true if hasDoorKey || knowsOverridePassword { print("Welcome!") } else { print("ACCESS DENIED") } // Prints "Welcome!"
論理演算子の組み合わせ
複数の論理演算子を組み合わせて、より長い複合式を作成できます。
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword { print("Welcome!") } else { print("ACCESS DENIED") } // Prints "Welcome!"
複数の論理演算子を持つ複合式は、左端の部分式を最初に評価します。
明示的な括弧
複雑な式の意図を読みやすくするために、括弧を含めると良い。
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword { print("Welcome!") } else { print("ACCESS DENIED") } // Prints "Welcome!"