メソッド


メソッド は、特定の型に関連付けられている関数です。クラス、構造体、および列挙型は、与えられた型のインスタンスを操作するための特定のタスクや機能をカプセル化する、インスタンスメソッドを定義することができます。クラス、構造体、および列挙型も型自体に関連付けられている型メソッドを定義できます。型メソッドは、Objective-C のクラスメソッドに似ています。


Swift では構造体や列挙型がメソッドを定義できるという事実は、C や Objective-C との大きな違いです。Objective-C では、クラスはメソッドを定義することができる唯一の型です。Swift では、クラス、構造体、または列挙型を定義するかどうかを選択し、作成する型でメソッドを定義する柔軟性もあります。


インスタンスメソッド


インスタンスメソッド は、特定のクラス、構造体、または列挙型のインスタンスに属している関数です。これらは、インスタンスの目的に関連する機能を提供することによって、またはインスタンス・プロパティにアクセスし、変更する方法を提供することによって、それらのインスタンスの機能をサポートします。Functions(関数) で説明したように、インスタンスメソッドは、関数とまったく同じ構文を持っています。


それが属する型の開閉括弧内にインスタンスメソッドを記述して下さい。インスタンスメソッドは、その型の他のすべてのインスタンスメソッドとプロパティへの暗黙のアクセス権を持っています。インスタンスメソッドは、それが属する型の特定のインスタンスでのみ呼び出すことができます。これは、既存のインスタンスなしに孤立して呼び出すことはできません。


ここでは、アクションが発生した回数をカウントするために使用できる簡単な Counter クラスを定義する例を示します。


  1. class Counter {
  2.         var count = 0
  3.         func increment() {
  4.                 count += 1
  5.         }
  6.         func increment(by amount: Int) {
  7.                 count += amount
  8.         }
  9.         func reset() {
  10.                 count = 0
  11.         }
  12. }


Counter クラスは3つのインスタンスメソッドを定義しています。


Counter クラスは、現在のカウンタ値を追跡するために、変数プロパティである count を宣言します。


プロパティと同じドット構文でインスタンスメソッドを呼び出して下さい。


  1. let counter = Counter()
  2. // the initial counter value is 0
  3. counter.increment()
  4. // the counter's value is now 1
  5. counter.increment(by : 5)
  6. // the counter's value is now 6
  7. counter.reset()
  8. // the counter's value is now 0


関数のパラメータは、(関数の本体内で使用するための) 名前と(関数を呼び出すときに使用するために) 引数のラベルの両方があり、それは 関数引数のラベルとパラメータ名 で説明しました。同じことは、メソッドのパラメータにも当てはまり、メソッドは型に関連付けられているだけの関数だからです。


self プロパティ


型のすべてのインスタンスには、インスタンス自体とまったく同じ self と言う暗黙のプロパティがあります。独自のインスタンスメソッド内の現在のインスタンスを参照するために、self プロパティを使用して下さい。


上記の例の increment() メソッドは、以下のように書くことができます:


  1. func increment() {
  2.         self.count += 1
  3. }


実際には、非常に頻繁にコードの中で self を書く必要はありません。明示的に self を記述しなくても、Swift は、メソッド内で周知のプロパティやメソッド名を使用するたびに、現在のインスタンスのプロパティまたはメソッドを参照していることを前提とします。この前提は、Counter の3つのインスタンスメソッド内の (self.count ではなく) count を使用することで例示されています。


インスタンスメソッドのパラメータ名が、そのインスタンスのプロパティと同じ名前を持つ場合は、この規則の主な例外です。この状況では、パラメータ名が優先され、より適格な方法でプロパティを参照することが必要となります。パラメータ名とプロパティ名を区別するために、self プロパティを使用して下さい。


ここでは、x というメソッドのパラメータと、インスタンスプロパティ x を区別するのに self を使用しています。


  1. struct Point {
  2.         var x = 0.0, y = 0.0
  3.         func isToTheRightOf(x: Double) -> Bool {
  4.                 return self.x > x
  5.         }
  6. }
  7. let somePoint = Point(x: 4.0, y: 5.0)
  8. if somePoint.isToTheRightOf(x: 1.0) {
  9.         print("This point is to the right of the line where x == 1.0")
  10. }
  11. // prints "This point is to the right of the line where x == 1.0"


self の接頭辞がないと、Swift は、x の両方の使用とも、x と言うメソッドパラメータを参照していることを前提とします。



インスタンスメソッド内から値型を変更


構造体と列挙型は 値型 です。デフォルトでは、値型のプロパティは、そのインスタンスメソッド内から変更することはできません。


ただし、特定のメソッド内の構造体または列挙型のプロパティを変更する必要がある場合は、そのメソッドのために動作を mutating (変異) して選択することができます。メソッドはその後そのプロパティをメソッド内から変異 (つまり、変更) することができ、メソッドが終了したときにそれが行なった変更を全て元の構造体に書き戻します。このメソッドはまた、その暗黙の self プロパティに、完全に新しいインスタンスを代入することもでき、そのメソッドが終了したときに、この新しいインスタンスは既存のものを置き換えます。


そのメソッドの func キーワードの前に mutating キーワードを配置することによって、この動作を選択できます。


  1. struct Point {
  2.         var x = 0.0, y = 0.0
  3.         mutating func moveBy(x deltaX: Double, y deltaY: Double) {
  4.                 x += deltaX
  5.                 y += deltaY
  6.         }
  7. }
  8. var somePoint = Point(x: 1.0, y: 1.0)
  9. somePoint.moveBy(x: 2.0, y: 3.0)
  10. print("The point is now at (\(somePoint.x), \(somePoint.y))")
  11. // prints "The point is now at (3.0, 4.0)"


上記の Point 構造体は、一定量 Point インスタンスを移動する、moveBy(x:y:) メソッドを定義しています。新しいポイントを返す代わりに、このメソッドは実際にそれが呼び出されたポイントを変更します。mutating キーワードが、そのプロパティを変更できるようにに、その定義に追加されています。


そのプロパティが変更できないので、定数構造体インスタンスの格納されたプロパティ で説明したように、それらが変数プロパティであっても、構造体型の定数では変異メソッドを呼び出せないので注意してください。


  1. let fixedPoint = Point(x: 3.0, y: 3.0)
  2. fixedPoint.moveByX(2.0, y: 3.0)
  3. // this will report an error


変異メソッド内で self に代入


変異メソッドは暗黙の self プロパティに、完全に新しいインスタンスを代入することができます。上に示した Point の例は、代わりに以下のように書けます:


  1. struct Point {
  2.        var x = 0.0, y = 0.0
  3.        mutating func moveBy(x deltaX: Double, y deltaY: Double) {
  4.                self = Point(x: x + deltaX, y: y + deltaY)
  5.        }
  6. }


変異 moveBy(x:y:) メソッドのこのバージョンは、その xy の値が目的の場所に設定されている全く新しい構造体を作成します。このメソッドの代替バージョンを呼び出した最終結果は、以前のバージョンを呼び出すのとまったく同じです。


列挙型の変異メソッドは、同じ列挙型とは別のケースであるように暗黙の self パラメータを設定できます。


  1. enum TriStateSwitch {
  2.        case off, low, high
  3.        mutating func next() {
  4.                switch self {
  5.                case .off:
  6.                        self = .low
  7.                case .low:
  8.                        self = .high
  9.                case .high:
  10.                        self = .off
  11.                }
  12.        }
  13. }
  14. var ovenLight = TriStateSwitch.low
  15. ovenLight.next()
  16. // ovenLight is now equal to .high
  17. ovenLight.next()
  18. // ovenLight is now equal to .off


この例では、3つの状態のあるスイッチの列挙型を定義しています。3つの異なる電気の状態 (off、lowhigh) の間のスイッチはその next() メソッドが呼び出されるたびに切り替わります。



型メソッド


上記のようにインスタンスメソッドは、特定の型のインスタンスで呼び出されるメソッドです。また、型自体で呼び出されるメソッドを定義することもできます。この種のメソッドは 型メソッド と呼ばれます。メソッドの func キーワードの前に static キーワードを書くことによって、型メソッドである事を示せます。また、クラスは、サブクラスがそのメソッドのスーパークラスの実装をオーバーライドできるようにするため、class キーワードを使用してもよいです。


注意: Objective-C では、Objective-C クラスだけのための型レベルのメソッドを定義できます。Swift では、すべてのクラス、構造体、列挙型の型レベルのメソッドを定義できます。各々の型メソッドはそれがサポートする型に範囲が明示的に限定されています。


型メソッドは、インスタンスメソッドのように、ドット構文で呼び出されます。しかし、その型のインスタンス上ではなく、型の上で型メソッドを呼び出します。ここでは、SomeClass というクラス上の型メソッドを呼び出す方法を示します。


  1. class SomeClass {
  2.        class func someTypeMethod() {
  3.                // type method implementation goes here
  4.        }
  5. }
  6. SomeClass.someTypeMethod()


型メソッドの本体内では、暗黙の self プロパティはその型のインスタンスというよりむしろ、その型自体を参照します。これは、インスタンス・プロパティとインスタンスメソッドのパラメータの場合と同様に、型プロパティと型メソッドのパラメータとの間で明確にするために self を使用できることを意味します。


より一般的には、型メソッドの本体内で使用するすべての資格のないメソッドとプロパティ名は、他の型レベルのメソッドとプロパティを参照します。型メソッドは、型の名前に接頭辞をつける必要なしに、他のメソッドの名前を持つ別の型メソッドを呼び出すことができます。同様に、構造体と列挙型上の型メソッドは、型名の接頭辞なしで型プロパティの名前を使用して、型プロパティにアクセスできます。


以下の例は、ゲームの異なるレベルまたはステージを通して、プレイヤーの進行状況を追跡する LevelTracker という構造体を定義しています。それは、一人プレイヤー用のゲームですが、1つのデバイスで複数のプレーヤーの情報を格納することができます。


ゲームを最初に遊んだとき (レベル1から離れて) ゲームのレベルはすべて、ロックされています。プレイヤーが、レベルを終了するたびに、そのレベルは、デバイス上のすべてのプレーヤーのためロック解除されます。LevelTracker 構造体は、ゲームのどのレベルがロック解除されたかを追跡するために、型プロパティとメソッドを使用します。また、個々のプレーヤーの現在のレベルを追跡します。


  1. struct LevelTracker {
  2.         static var highestUnlockedLevel = 1
  3.         var currentLevel = 1
  4.         static func unlock(_ level: Int) {
  5.                 if level > highestUnlockedLevel { highestUnlockedLevel = level }
  6.         }
  7.         static func isUnlocked(_ level: Int) -> Bool {
  8.                 return level <= highestUnlockedLevel
  9.         }
  10.         @discardableResult
  11.         mutating func advance(to level: Int) -> Bool {
  12.                 if LevelTracker.isUnlocked(level) {
  13.                 currentLevel = level
  14.                 return true
  15.         } else {
  16.                 return false
  17.         }
  18.     }
  19. }


LevelTracker 構造体は、すべてのプレイヤーがロック解除した最高レベルを追跡します。この値は、 highestUnlockedLevel という型プロパティに格納されます。


LevelTrackerhighestUnlockedLevel プロパティで動作するように2つの型関数を定義しています。最初のものは、新しいレベルがロック解除されたときいつでも highestUnlockedLevel の値を更新する unlock(_:) と言う型関数です。第二は、特定のレベル数がすでにロック解除されている場合 true を返す isUnlocked(_:) と言うコンビニエンス型関数です。(これら型メソッドは、LevelTracker.highestUnlockedLevel と書く必要なしに highestUnlockedLevel の型プロパティにアクセスできることに注意してください。)


その型プロパティと型メソッドに加え、LevelTracker はゲームを通じて、個々のプレイヤーの進行状況を追跡します。これは、プレイヤーが現在遊んでいるレベルを追跡するために currentLevel というインスタンスプロパティを使用します。


currentLevel プロパティの管理を支援するために、LevelTrackeradvance(to:) というインスタンスメソッドを定義しています。 currentLevel を更新する前に、このメソッドは要求された新しいレベルがすでにロック解除されているかどうかチェックします。advance(to:) メソッドは、それが実際に currentLevel を設定することができたかどうかを示すブール値を返します。戻り値を無視するために adbance(to:) メソッドを呼び出すコードが間違うのはは必ずではないので、この関数は @discardableResult 属性でマークされています。この属性の詳細については、属性 を参照してください。


LevelTracker 構造体は、Player クラスと共に使用され、以下に示すように、個々のプレイヤーの進行状況を追跡し、更新します。


  1. class Player {
  2.         var tracker = LevelTracker()
  3.         let playerName: String
  4.         func complete(level: Int) {
  5.                 LevelTracker.unlock(level + 1)
  6.                 tracker.advance(to: level + 1)
  7.         }
  8.         init(name: String) {
  9.                 playerName = name
  10.         }
  11. }


Player クラスは、そのプレイヤーの進行状況を追跡するために LevelTracker の新しいインスタンスを作成します。また、プレイヤーが特定のレベルを完了するたびに呼び出される complete(level:) と言うメソッドも提供します。このメソッドは、すべてのプレーヤーの次のレベルのロックを解除し、プレイヤーの進行状況を更新し、次のレベルに彼らを移動します。(レベルは前の行の LevelTracker.unlock(_:) への呼び出しによってそのレベルのロックが解除されたことがわかるので、advance(to:) のブール戻り値は、無視されます。)


新しいプレイヤーの Player クラスのインスタンスを作成できたら、プレイヤーがレベル1を完了したときに何が起こるか見ましょう:


  1. var player = Player(name: "Argyrios")
  2. player.complete(level: 1)
  3. print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
  4. // prints "highest unlocked level is now 2"


まだゲーム内のどのプレイヤーによってもロック解除されていないレベルに移動しようとする、第2のプレイヤーを作成した場合、プレイヤーの現在のレベルを設定する試みは失敗します。


  1. player = Player(name: "Beto")
  2. if player.tracker.advance(to: 6) {
  3.         print("player is now on level 6")
  4. } else {
  5.         print("level 6 has not yet been unlocked")
  6. }
  7. // prints "level 6 has not yet been unlocked"




前:プロパティ 次:サブスクリプト
目次
Xcode 10 の新機能

Swift:はじめに
Swift と Cocoa と Objective-C
Swift Blog より

  • ようこそ Swift へ(Part I)
  • Swift について
  • バージョン互換性
  • Swift のツアー
  • 単純な値
    制御フロー
    関数とクロージャ
    オブジェクトとクラス
    列挙型と構造体
    プロトコルと拡張機能
    エラー処理
    汎用(ジェネリック)
  • Swift 言語のガイド(Part II)
  • Swift の基本
  • 定数と変数
  • 定数と変数の宣言
    型注釈
    定数と変数の命名
    定数と変数の印刷
    コメント
    セミコロン
  • 整数
  • 整数の境界
    Int
    UInt
    浮動小数点数
    安全な型と型推論
    数値リテラル
  • 数値型変換
  • 整数変換
    整数と浮動小数点間の変換
    型エイリアス
    ブール型
    タプル
  • Optional
  • nil
    if 文と強制開封
    Optional の結合
    暗黙に開封された Optionals
    エラー処理
  • アサーション(断言)と前提条件
  • アサーションを使用したデバッグ
    前提条件の実施
  • 基本演算子
  • 専門用語
    代入演算子
  • 算術演算子
  • 剰余演算子
    単項マイナス演算子
    単項プラス演算子
    複合代入演算子
    比較演算子
    三項条件演算子
    Nil 合体演算子
  • 範囲演算子
  • 閉鎖範囲演算子
    半開放範囲演算子
    片方の範囲
  • 論理演算子
  • 論理 NOT 演算子
    論理 AND 演算子
    論理 OR 演算子
    論理演算子の組み合わせ
    明示的な括弧
  • 文字列と文字
  • 文字列リテラル
    複数行の文字列リテラル
    文字列リテラル内の特殊文字
    空の文字列の初期化
    文字列の可変性
    文字列は値の型
    文字を使った作業
    文字列と文字を連結
    文字列補間
  • ユニコード(Unicode)
  • Unicode スカラー
    文字列リテラルの中の特別の文字
    拡張書記クラスタ
    文字を数える
  • 文字列のアクセスと変更
  • 文字列のインデックス
    部分文字列
    挿入と削除
  • 文字列の比較
  • 文字列と文字の等価性
    接頭辞と接尾辞の等価性
  • 文字列の Unicode 表現
  • UTF-8 の表現
    UTF-16 表現
    Unicode のスカラー表現
  • コレクション型
  • コレクションの可変性
  • 配列
  • 配列型省略構文
    空の配列の作成
    デフォルト値を持つ配列の作成
    2つの配列を共にして一つの配列に
    配列リテラルでの配列の作成
    配列へのアクセスと変更
    配列の繰り返し処理
  • セット
  • セット型のハッシュ値
    セット型の構文
    空のセットの作成と初期化
    配列リテラルでセットの作成
    セットへのアクセスと変更
    セットを反復処理
  • セット操作の実行
  • 基本的なセットの操作
    セットの身分と等価性
  • Dictionary
  • Dictionary 型の省略型構文
    空の Dictionary を作成
    Dictionary リテラルで Dictionary の作成
    Dictionary のアクセスと変更
    Dictionary を繰り返し処理
  • フロー制御
  • For-In ループ
  • While ループ
  • While
    Repeat-While
  • 条件文
  • if 文
  • Switch
  • 暗黙の Fallthrough なし
    範囲の一致
    タプル(Tuples)
    値の結合
    Where
    複合した case
  • 制御転送文
  • Continue
  • Break
  • ループ文内の Break
    Switch 文内の Break
    Fallthrough
    ラベル付きの文
    早期終了
    API 利用可能性の確認
  • 関数
  • 関数の定義と呼び出し
  • 関数のパラメータと戻り値
  • パラメータなしの関数
    複数パラメータの関数
    戻り値なしの関数
    複数の戻り値を持つ関数
    optional のタプル型の戻り値
  • 関数引数のラベルとパラメータ名
  • 引数のラベルの指定
    引数ラベルの省略
    デフォルトのパラメータ値
    可変個引数のパラメータ
    In-Out パラメータ
  • 関数型
  • 関数型の使用
    パラメータ型としての関数型
    戻り値の型としての関数型
    入れ子になった関数
  • クロージャ
  • クロージャ式
  • ソートするメソッド
    クロージャ式の構文
    文脈から型を推論
    単一式クロージャからの暗黙的戻り値
    引数名の省略
    演算子メソッド
    後続クロージャ
    値のキャプチャ
    クロージャは参照型
    クロージャのエスケープ
    オートクロージャ
  • 列挙型
  • 列挙型の構文
    switch 文で列挙型の値の一致
    関連する値
  • 生の値
  • 暗黙に割り当てられた生の値
    生の値からの初期化
    再帰的な列挙型
  • クラスと構造体
  • クラスと構造体を比較
  • 定義の構文
    クラスと構造体のインスタンス
    プロパティにアクセス
    構造体型のためのメンバー化イニシャライザ
    構造体と列挙型は値型
  • クラスは参照型
  • ID 演算子
    ポインタ
    クラスと構造体の間の選択
    文字列、配列、辞書の代入とコピーの動作
  • プロパティ
  • 格納されたプロパティ
  • 定数構造体インスタンスの格納されたプロパティ
    遅延した格納されたプロパティ
    格納されたプロパティとインスタンス変数
  • 計算されたプロパティ
  • セッタ宣言の省略形
    読み取り専用の計算されたプロパティ
    プロパティ監視者
    グローバルとローカル変数
  • 型プロパティ
  • 型プロパティの構文
    型プロパティの照会と設定
  • メソッド
  • インスタンスメソッド
  • self プロパティ
    インスタンスメソッド内から値の型を変更
    変異メソッド内で self に代入
    型メソッド
  • サブスクリプト
  • サブスクリプトの構文
    サブスクリプトの使用法
    サブスクリプトのオプション
  • 継承
  • 基本クラスの定義
    サブクラス化
  • オーバーライド(上書き)
  • スーパークラスメソッド、プロパティ、サブスクリプトへのアクセス
    オーバーライドするメソッド
  • オーバーライドするプロパティ
  • プロパティのゲッタとセッタのオーバーライド
    プロパティ監視者のオーバーライド
    オーバーライドの防止
  • 初期化
  • 格納されたプロパティの初期値を設定
  • イニシャライザ
    デフォルトのプロパティ値
  • 初期化のカスタマイズ
  • 初期化パラメータ
    パラメータ名と引数ラベル
    引数ラベルのないイニシャライザのパラメータ
    Optional のプロパティ型
    初期化中に定数プロパティへの代入
  • デフォルトのイニシャライザ
  • 構造体型のためのメンバ化イニシャライザ
    値型のイニシャライザデリゲート
  • クラスの継承と初期化
  • 指定イニシャライザとコンビニエンスイニシャライザ
    指定とコンビニエンスイニシャライザの構文
    クラス型のイニシャライザデリゲート
    二相の初期化
    イニシャライザ継承とオーバーライド
    自動イニシャライザの継承
    実際の指定とコンビニエンスイニシャライザ
  • 失敗可能イニシャライザ
  • 生の値を持つ列挙型のための失敗可能イニシャライザ
    初期化失敗の伝播
    失敗可能イニシャライザのオーバーライド
    init! の失敗可能イニシャライザ
    必須イニシャライザ
    クロージャや関数でのデフォルトのプロパティ値設定
  • デイニシャライザ
  • デイニシャライザはどのように働くか
    作動中のデイニシャライザ
  • Optional の連鎖
  • 強制開封の代替としての Optional の連鎖
    Optional の連鎖のモデルクラスの定義
    Optional の連鎖を使用したプロパティへのアクセス
    Optional の連鎖を通じてメソッドを呼び出す
  • Optional の連鎖を通じてサブスクリプトへのアクセス
  • Optional 型のサブスクリプトにアクセス
    連鎖の複数レベルのリンク
    optional の戻り値を持つメソッドでの連鎖
  • エラー処理
  • エラーの表現と Throw
    エラーの処理
    throw 関数を使用したエラーの伝播
    Do-Catch を使用したエラー処理
    エラー をOptional の値に変換
    エラー伝播を無効に
    クリーンアップアクションの指定
  • 型キャスト
  • 型キャストのためのクラス階層の定義
    型のチェック
    ダウンキャスト
  • Any と AnyObjecgt 用の型キャスティング
  • ネストした型
  • 実際のネストした型
    ネストした型への参照
  • 拡張機能
  • 拡張機能の構文
    計算されたプロパティ
    イニシャライザ
  • メソッド
  • 変異インスタンスメソッド
    サブスクリプト
    ネストした型
  • プロトコル
  • プロトコルの構文
    プロパティの要件
    メソッドの要件
    変異メソッドの要件
  • イニシャライザの要件
  • プロトコルイニシャライザ要件のクラス実装
    失敗可能イニシャライザの要件
    型としてのプロトコル
    デリゲート
  • 拡張機能を持つプロトコル準拠の追加
  • 拡張機能を持つプロトコルの採用を宣言
    プロトコル型のコレクション
    プロトコルの継承
    クラス専用プロトコル
    プロトコルの構成
    プロトコル準拠の確認
    Optional のプロトコル要件
  • プロトコル拡張機能
  • デフォルトの実装の提供
    プロトコル拡張機能に制約を追加
  • ジェネリック(汎用)
  • 汎用が解決する問題
    汎用関数
    型パラメータ
    型パラメータの命名
    汎用の型
    汎用型の拡張
  • 型の制約
  • 型制約の構文
    実際の型の制約
  • 関連型
  • 実際の関連型
    既存の型を拡張して関連型を指定
    型注釈を使用して関連型を制約
    汎用の Where 句
    汎用の Where 句を含む拡張機能
    関連する型と汎用の Where 句
    汎用のサブスクリプト
  • 自動参照カウント
  • どのように ARC は働くか
    実際の ARC
    クラスインスタンス間の強い循環参照
  • クラスインスタンス間の強い循環参照の解決
  • 弱い参照
    所有されていない参照
    所有されていない参照と暗黙に開封された Optional のプロパティ
    クロージャの strong な循環参照
  • クロージャの strong な循環参照の解決
  • キャプチャリストの定義
    弱い参照と所有されていない参照
  • メモリの安全性
  • メモリへのアクセス競合の理解
    メモリアクセスの特徴
    In-Out パラメータへのアクセスの競合
    メソッド内の Self へのアクセスの競合
    プロパティへのアクセスの競合
  • アクセス制御
  • モジュールとソースファイル
  • アクセスレベル
  • アクセスレベルの全体的指針
    デフォルトのアクセスレベル
    ターゲット一つのアプリのアクセスレベル
    フレームワークのアクセスレベル
    ユニットテストのターゲット用のアクセスレベル
    アクセス制御の構文
  • カスタム型
  • タプル型
    関数型
  • 列挙型
  • 生の値と関連する値
    ネストした型
    サブクラス化
  • 定数、変数、プロパティ、およびサブスクリプト
  • ゲッタとセッタ
  • イニシャライザ
  • デフォルトのイニシャライザ
    構造体型用のデフォルトメンバ化イニシャライザ
  • プロトコル
  • プロトコルの継承
    プロトコルの準拠
  • 拡張機能
  • 拡張機能の private メンバ
    汎用
    型エイリアス
  • 高度な演算子
  • ビット単位演算子
  • ビット単位の NOT 演算子
    ビット単位の AND 演算子
    ビット単位の OR 演算子
    ビット単位の XOR 演算子
  • ビット単位の左と右シフト演算子
  • 符号なし整数のシフト動作
    符号付き整数のシフト動作
  • オーバーフロー演算子
  • 値オーバーフロー
    優先順位と結合性
  • 演算子メソッド
  • 接頭辞と接尾辞演算子
    複合代入演算子
    等価演算子
  • カスタム演算子
  • カスタム挿入辞演算子の優先順位
  • 言語のガイド(Part III)
  • 言語リファレンスについて
  • 文法の読み方
  • 語彙の構造
  • 空白とコメント
    識別子
    キーワードと句読点
  • リテラル
  • 整数リテラル
    浮動小数点リテラル
    文字列のリテラル
    演算子

  • 型注釈
    型識別子
    タプル型
    関数型
    エスケープしないクロージャの制限事項
    配列型
    辞書型
    Optional の型
    暗黙に開封された Optional の型
    プロトコル構成の型
    メタタイプ型
    型の継承句
    型の推測

  • 接頭辞式
    Try 演算子
  • 二項式
  • 代入演算子
    三項条件演算子
    型キャスト演算子
  • 一次式
  • リテラル式
    Self 式
    スーパークラス式
  • クロージャ式
  • キャプチャ・リスト
    暗黙のメンバ式
    括弧で囲まれた式
    タプル式
    ワイルドカード式
    キーパス式
    セレクタ式
    キーパス文字列式
  • 接尾辞の式
  • 関数呼び出し式
    イニシャライザ式
    明示的なメンバ式
    接尾辞の Self 式
    サブスクリプト 式
    強制値の式
    Optional の連鎖式

  • ループ文
  • For-In 文
    While 文
    Repeat-While 文
  • 分岐文
  • if 文
    Guard 文
  • switch 文
  • switch 文は、網羅的である必要あり
    実行が暗黙的に case を Fall Through しない
    ラベル付き文
  • 制御転送文
  • break 文
    continue 文
    fallthrough 文
    return 文
    throw 文
    defer 文
    do 文
  • コンパイラ制御文
  • 条件コンパイルブロック
    行制御文
    利用可能条件
  • 宣言
  • トップレベルのコード
    コードブロック
    Import 宣言
    ­定数の宣言
  • 変数の宣言
  • 格納された変数と格納された変数のプロパティ
    計算された変数と計算されたプロパティ
    格納された変数監視者とプロパティの監視者
    型変数プロパティ
    型エイリアス宣言
  • 関数の宣言
  • パラメータ名
    In-Out パラメータ
    パラメータの特殊な種類
    メソッドの特殊な種類
    Throw する関数とメソッド
    Rethrow する関数とメソッド
    決して返さない関数
  • 列挙型の宣言
  • 任意の型の case を列挙
  • 間接による列挙
    生の値型の case を列挙
    列挙型 case へのアクセス
    構造体の宣言
    クラスの宣言
  • プロトコルの宣言
  • プロトコル・プロパティ宣言
    プロトコル・メソッド宣言
    プロトコル・イニシャライザ宣言
    プロトコル・サブスクリプト宣言
    プロトコルに関連した型の宣言
  • イニシャライザ宣言
  • 失敗可能イニシャライザ
    デイニシャライザ宣言
    拡張機能の宣言
    サブスクリプト宣言
    演算子の宣言
    優先順位グループ宣言
  • 宣言修飾子
  • アクセス制御レベル
  • 属性
  • 宣言の属性
  • インターフェイスビルダーで使われる宣言属性
    型の属性
  • パターン
  • ワイルドカードパターン
    識別子パターン
    値結合パターン
    タプルパターン
    列挙型 case パターン
    Optional のパターン
    型キャストパターン
    式のパターン
  • 汎用パラメータと引数
  • 汎用パラメータ句
  • 汎用の where 句
    汎用引数句
  • 文法のまとめ
  • 語彙の構造



    宣言
    属性
    パターン
    汎用パラメータと引数
  • マニュアルの変更履歴
  • 変更履歴