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を読むのは重箱の隅ほど美味しそうだけど深みにハマっていくのもアレなので。