継承


クラスは別のクラスからメソッド、プロパティ、およびその他の特性を 継承 できます。1つのクラスが別のクラスから継承する場合、継承するクラスは サブクラス として知られており、そこから継承されるクラスは、その スーパークラス として知られています。継承は、Swift では他の型からクラスを区別する基本的な動作です。


Swift のクラスは、メソッド、プロパティ、およびそのれらスーパークラスに属するサブスクリプトを呼び出し、アクセスし、それらの動作を洗練または変更するために、それらのメソッド、プロパティ、およびサブスクリプトの独自にオーバーライドするバージョンを提供できます。Swift は上書き(オーバーライド) が一致するスーパークラスの定義を持っている上書きの定義であることをチェックして正しいことを確認するのに役立ちます。


また、クラスはプロパティの値が変更された時に通知するように、継承されたプロパティにプロパティ監視者を追加できます。プロパティ監視者は、それが元々格納されたプロパティとしてかまたは計算されたプロパティとして定義されているかに関わりなく、任意のプロパティに追加できます。



基本クラスの定義


別のクラスから継承していない全てのクラスは 基本クラス として知られています。



注意: Swift のクラスは、ユニバーサル基本クラスからは継承しません。スーパークラスを指定せずに定義したクラスは、あなたがビルドするための基本クラスに自動的になります。


以下の例では、vehicle と言う基本クラスを定義しています。この基本クラスは、(Double のプロパティ型を推論して) 0.0 のデフォルト値で、currentSpeed という格納されたプロパティを定義しています。currentSpeed プロパティの値は、vehicle の説明を作成するために読み取り専用の description と言う計算された String プロパティで使用されます。


Vehicle 基本クラスは makeNoise と言うメソッドも定義しています。このメソッドは、実際には基本の Vehicle インスタンスには何もしていませんが、後で Vehicle のサブクラスによってカスタマイズされます:


  1. class Vehicle {
  2.        var currentSpeed = 0.0
  3.        var description: String {
  4.                return "traveling at \(currentSpeed) miles per hour"
  5.        }
  6.        func makeNoise() {
  7.                // do nothing - an arbitrary vehicle doesn't necessarily make a noise
  8.        }
  9. }


空の括弧が続く型の名前として書かれる、イニシャライザ構文 で、Vehicle の新しいインスタンスを作成します。


let someVehicle = Vehicle()



新しい Vehicle インスタンスを作成すると、vehicle の現在の速度を人間が読める記述にして印刷するために、description プロパティにアクセスできます。


  1. print("Vehicle: \(someVehicle.description)")
  2. // Vehicle: traveling at 0.0 miles per hour


Vehicle クラスは、任意の車両 (vehicle) のための共通の特性を定義していますが、それ自体は多くは使用されません。それをより便利にするには、車両 (vehicle) のより具体的な種類を記述するためにそれを洗練する必要があります。



サブクラス化


サブクラス化 は、既存のクラス上に新しいクラスを基づかせる行為です。サブクラスは、既存のクラスから特性を継承し、それをあなたは洗練することができます。また、サブクラスに新しい特性を追加する事もできます。


コロンで区切ってスーパークラスの名前の前に、サブクラス名を書き、サブクラスがスーパークラスを持っていることを示すには:


  1. class SomeSubclass: SomeSuperclass {
  2.        // subclass definition goes here
  3. }


次の例では、そのスーパークラスが Vehicle である Bicycle と言うサブクラスを定義しています。


  1. class Bicycle: Vehicle {
  2.        var hasBasket = false
  3. }


新しい Bicycle クラスは自動的に、その currentSpeeddescription プロパティとその makeNoise() メソッドのような、Vehicle の特性をすべて得ます。


それが継承する特性に加えて、Bicycle クラスはデフォルト値で false (プロパティで Bool の型を推論) を持つ、新しい格納されたプロパティ、hasBasket を定義します。


デフォルトでは、作成する新しい Bicycle インスタンスは全てバスケットを持っていません。そのインスタンスが作成された後には、特定の Bicycle インスタンスに対して hasBasket プロパティを true に設定することができます。


  1. let bicycle = Bicycle()
  2. bicycle.hasBasket = true


また、Bicycle のインスタンスの継承した currentSpeed プロパティを変更し、インスタンスの継承した description プロパティを照会することもできます。


  1. bicycle.currentSpeed = 15.0
  2. print("Bicycle: \(bicycle.description)")
  3. // Bicycle: traveling at 15.0 miles per hour


サブクラスは、それ自体サブクラス化できます。次の例では、"タンデム" として知られている2人乗り自転車のための Bicycle のサブクラスを作成しています。


  1. class Tandem: Bicycle {
  2.        var currentNumberOfPassengers = 0
  3. }


Tandem は、Bicycle からプロパティとメソッドをすべて継承し、順番に Vehicle からプロパティとメソッドをすべて継承します。Tandem サブクラスもデフォルト値が 0currentNumberOfPassengers という新しい格納されたプロパティを追加します。


Tandem のインスタンスを作成する場合は、その新しいものと継承されたプロパティのいずれかと作業でき、それが Vehicle から継承する読み取り専用の description プロパティを照会できます。


  1. let tandem = Tandem()
  2. tandem.hasBasket = true
  3. tandem.currentNumberOfPassengers = 2
  4. tandem.currentSpeed = 22.0
  5. print("Tandem: \(tandem.description)")
  6. // Tandem: traveling at 22.0 miles per hour


オーバーライド(上書き)


サブクラスは、インスタンスメソッド、型メソッド、インスタンスプロパティ、型プロパティの独自のカスタム実装を提供し、そうでなければスーパークラスから継承するサブスクリプトを提供できます。これは、オーバーライド(上書き) として知られています。


それ以外の場合継承される特徴をオーバーライドするには、override キーワードを、オーバーライドの定義の前に付けます。そうすることでオーバーライドを提供する意向と、誤って一致する定義を提供していないことを明確にします。間違ってオーバーライドすると、予期しない動作を引き起こし、そしてコードがコンパイルされた場合には、override キーワードなしにオーバーライドした場合はエラーと診断されます。


override キーワードはまた、オーバーライドするクラスのスーパークラス (またはその親の一つ) がオーバーライドのために提供したものと一致する宣言を持っているかをチェックするように Swift コンパイラに求めます。このチェックは、オーバーライドの定義が正しいことを保証します。



スーパークラスメソッド、プロパティ、サブスクリプトへのアクセス


メソッド、プロパティ、またはサブクラスのサブスクリプトオーバーライドを提供するとき、オーバーライドの一部として、既存のスーパークラスの実装を使用すると便利な場合があります。たとえば、その既存の実装の動作を洗練することができ、または既存の継承された変数に変更された値を格納できます。


これが適切である所には、super の接頭辞を使用してメソッド、プロパティ、またはサブスクリプトのスーパークラスバージョンにアクセスして下さい:


オーバーライドするメソッド


サブクラス内のメソッドの誂えた、または代替の実装を提供するために、継承されたインスタンスまたは型メソッドをオーバーライドできます。


以下の例では、Train と言う Vehicle の新しいサブクラスを定義しており、Vehicle から Train が継承した makeNoise() メソッドをオーバーライドしています。


  1. class Train: Vehicle {
  2.        override func makeNoise() {
  3.                print("Choo Choo")
  4.        }
  5. }


Train の新しいインスタンスを作成し、その makeNoise() メソッドを呼び出す場合は、メソッドの Train のサブクラスのバージョンが呼び出されたことがわかります。


  1. let train = Train()
  2. train.makeNoise()
  3. // prints "Choo Choo"


オーバーライドするプロパティ


そのプロパティに独自のカスタムゲッタとセッタを提供して、継承したインスタンスや型プロパティをオーバーライドでき、または基礎となるプロパティ値が変化した時監視するように、プロパティ監視者を追加してプロパティのオーバーライドを有効にします。



プロパティのゲッタとセッタのオーバーライド


継承されたプロパティがソースで、格納されたプロパティとか、計算されたプロパティとして実装されているかどうかには関係なく、全ての 継承されたプロパティをオーバーライドする、カスタムのゲッタを(適切であれば、セッタも) 提供できます。継承されたプロパティの格納された、または計算されたプロパティは、サブクラスによって知られておらず、継承されたプロパティは、特定の名前と型を持っていることを知っているだけです。オーバーライドするプロパティの名前と型を両方共、オーバーライドが同じ名前と型のスーパークラスのプロパティと一致する事を確認するようにコンパイラを有効にするよう常に宣言しなければなりません。


サブクラスのプロパティのオーバーライドでセッタとゲッタの両方を提供することで、読み書きできるプロパティとして継承された読み取り専用のプロパティを提示できます。ただし、読み取り専用のプロパティを継承された読み書きプロパティとして提示することはできません。


注意: プロパティのオーバーライドの一部として、セッタを提供する場合は、そのオーバーライドのゲッタも提供しなければなりません。オーバーライドするゲッタ内の継承されたプロパティの値を変更したくない場合は、someProperty がオーバーライドするプロパティの名前なら、ゲッタから super.someProperty を返すことによって、継承された値を単に渡すことができます。


以下の例では、Vehicle のサブクラスである Car と言う新しいクラスを定義しています。Car クラスは gear と言う新しい格納されたプロパティを導入し、そのデフォルトの整数値は 1 です。Car クラスは、また Vehicle から継承した description プロパティをオーバーライドし、現在の gear を含むカスタムの description (説明) を提供します:


  1. class Car: Vehicle {
  2.         var gear = 1
  3.         override var description: String {
  4.                 return super.description + " in gear \(gear)"
  5.         }
  6. }


description プロパティのオーバーライドは、Vehicle クラスの description プロパティを返す super.description を呼び出して始まります。descriptionCar クラスのバージョンは、現在の gear についての情報を提供するために、この説明 (description) の最後にいくつかのテキストを追加します。


Car クラスのインスタンスを作成し、その gearcurrentSpeed プロパティを設定すると、その description プロパティは、Car クラス内で定義され仕立てた説明を返すのを見ることができます:


  1. let car = Car()
  2. car.currentSpeed = 25.0
  3. car.gear = 3
  4. print("Car: \(car.description)")
  5. // Car: traveling at 25.0 miles per hour in gear 3


プロパティ監視者のオーバーライド


継承されたプロパティにプロパティ監視者を追加するには、プロパティのオーバーライドを使用できます。これは、そのプロパティがどのように元々実装されたかに関係なく、継承されたプロパティの値が変更された時に、通知されることを可能にします。プロパティ監視者の詳細については、プロパティ監視者 を参照してください。



注意: 継承された、定数の格納されたプロパティまたは継承された読み取り専用の計算されたプロパティにプロパティ監視者を追加することはできません。これらのプロパティ値の設定はできないので、オーバーライドの一部として willSet または didSet の実装を提供することは適切ではありません。

また、オーバーライドするセッタと同じプロパティのオーバーライドするプロパティ監視者の両方を提供することもできないことにを注意してください。プロパティ値の変化を監視したければ、そのプロパティ用のカスタムセッタをすでに提供している場合は、カスタムセッタ内から全ての値の変化を単に監視できます。


以下の例では、Car のサブクラスである AutomaticCar と言う新しいクラスを定義しています。AutomaticCar クラスは、現在の速度に基づいて使用する、適切なギアを自動的に選択する、自動変速機のある車を表します。


  1. class AutomaticCar: Car {
  2.         override var currentSpeed: Double {
  3.                 didSet {
  4.                         gear = Int(currentSpeed / 10.0) + 1
  5.                 }
  6.         }
  7. }


AutomaticCar インスタンスの currentSpeed プロパティを設定するたびに、プロパティの didSet 監視者は、新しい速度に対するギアを適切に選択し、インスタンスの gear プロパティを設定します。具体的には、プロパティ監視者は、10 で割った新しい currentSpeed 値を、最も近い整数に切り捨て、1 を加えた値のギアを選択します。35.0 の速度は 4 のギアを生成します。


  1. let automatic = AutomaticCar()
  2. automatic.currentSpeed = 35.0
  3. print("AutomaticCar: \(automatic.description)")
  4. // AutomaticCar: traveling at 35.0 miles per hour in gear 4


オーバーライドの防止


final とマークすることでメソッド、プロパティ、またはサブスクリプトを、オーバーライドされる事から防ぐことができます。メソッド、プロパティ、またはサブスクリプトの前置キーワードに final 修飾子を書くことでこれができます。(final var、final func、final class func、 そして final subscript のように)


サブクラス内の final メソッド、プロパティ、またはサブスクリプトをオーバーライドしようとしても、コンパイル時エラーとして報告されます。拡張機能内のクラスに追加するメソッド、プロパティ、またはサブスクリプトも拡張機能の定義内の final としてマークできます。


そのクラス定義 (final class) 内で class キーワードの前に final 修飾子を書くことで、全体のクラスを final とマークできます。サブクラスを final クラスにしようとすると、コンパイル時エラーとして報告されます。





前:サブスクリプト 次:初期化
目次
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 句
    汎用引数句
  • 文法のまとめ
  • 語彙の構造



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