削除された内容 追加された内容
文法関連を別ページにう
336 行
| <code>as?</code> || Optional型へのキャスト キャストできない場合はnilとなる
|}
 
=== 演算子オーバーロード ===
Swiftでは任意の型に対して、既存の演算子をオーバーロードして独自の振る舞いを定義することができる。<br />
なお <code>= -> . // /* */</code> は予約されておりオーバーロードしたりカスタム演算子(後述)として定義することはできない。
<syntaxhighlight lang="swift">
struct Vector2D {
var x = 0.0
var y = 0.0
}
 
func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D {
return Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
 
prefix func - (rhs: Vector2D) -> Vector2D {
return Vector2D(x: -rhs.x, y: -rhs.y)
}
 
func += (inout lhs: Vector2D, rhs: Vector2D) {
lhs = lhs + rhs
}
 
prefix func ++ (inout rhs: Vector2D) -> Vector2D {
rhs += Vector2D(x: 1.0, y: 1.0)
return rhs
}
 
let vec1 = Vector2D(x: 2.0, y: 3.0)
let vec2 = Vector2D(x: 5.0, y: 1.0)
let vec3 = vec1 + vec2 // {x 7.0, y 4.0}
var vec4 = -vec1 // {x -2.0, y -3.0}
vec4 += vec2 // {x 3.0, y -2.0}
++vec4 // {x 4.0, y -1.0}
</syntaxhighlight>
 
=== カスタム演算子 ===
Swift標準の定義済み演算子(<code>+</code>、<code>*</code>、<code>%</code>など)の他に、全く新しい演算子を定義することができる。新しく定義したカスタム演算子は、標準の演算子と同じように演算子オーバーロードを実装できる。
<syntaxhighlight lang="swift">
// 中置演算子 ** を定義する
infix operator ** { precedence 155 associativity right }
 
func ** (lhs: Double, rhs: Double) -> Double {
return pow(lhs, rhs)
}
 
2 ** 3 // 8.0
 
0.5 * 2 ** 3 ** 2 // 256.0
// **演算子は *演算子よりも優先順位が高く、右結合として定義したので
// この式は 0.5 * (2 ** (3 ** 2)) の意味となる
</syntaxhighlight>
 
== その他 ==