Advanced Operators
昨日に引き続き https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html を読む。
- Swiftの算術演算子はオーバーフローしない
Int16.max + 1
はエラー- オーバーフローする演算子
- オーバーフロー 加算
&+
- オーバーフロー 減算
&-
- オーバーフロー 乗算
&*
- オーバーフロー 加算
- 二項
static func + (left: T, right: T) -> T {…}
- 単項前置
static prefix func - (v: T) -> T {…}
- 複合代入
static func += (left: inout T, right: T) {…}
- デフォルトの代入演算子はオーバーロードできない
- 3項演算子はオーバーロードできない
- 等価
static func == (left: T, right: T) -> Bool {…}
プロトコルEquatable
をconform ==
を実装したら、ふつう!=
は実装する必要はないEquatable
プロトコルをconformすると宣言したら Swift が==
を合成してくれる場合- Equatable型の格納プロパティだけ持ってる構造体
- Equatable型の関連型だけ持つ列挙型
- 関連型を持たない列挙型
- カスタム演算子
operator
宣言は ファイルスコープでなければならない prefix operator ☹
static prefix func ☹ (v: T) -> T {…}
infix operator ☺: AdditionPrecedence
static func ☺ (left: T, right: T) -> T {…}
- 演算子の優先順位は Swift Standard Libraryのほうで決まっているみたい
さてLANGUAGE GUIDEがひととおり終わったので なんかiOSアプリを作ってみたい。ゲームとか。 LANGUAGE REFERENCEを読むのは重箱の隅ほど美味しそうだけど深みにハマっていくのもアレなので。