拡張機能


拡張機能 は、既存のクラス、構造体、列挙型、またはプロトコル型に新しい機能を追加します。これは、(逆行的モデリング として知られている) 元のソースコードへのアクセス権を持っていない型を拡張する機能を含んでいます。機能拡張は、Objective-C のカテゴリに似ています。(Objective-C のカテゴリとは異なり、Swift の拡張機能には名前がありません。)


Swift の機能拡張は以下のことができます:


Swift では、その要件の実装を提供し、適合する型を活用できる機能を追加するためのプロトコルを拡張もできます。詳細については、プロトコル拡張機能 を参照してください。


注意: 拡張機能は、型に新しい機能を追加できますが、既存の機能をオーバーライドすることはできません。


拡張機能の構文


extension キーワードを使用して拡張機能を宣言します。


  1. extension SomeType {
  2.         // new functionality to add to SomeType goes here
  3. }


拡張機能は、1つ以上のプロトコルを採用するために、既存の型を拡張できます。プロトコルの適合性を追加するには、クラスまたは構造体を書くのと同じ方法でプロトコル名を記述して下さい。


  1. extension SomeType: SomeProtocol, AnotherProtocol {
  2.         // implementation of protocol requirements goes here
  3. }


このようなプロトコル準拠の追加は 拡張機能を持つプロトコル準拠の追加 で説明されています。



汎用型の拡張 で説明したように、拡張機能を使用して、既存の汎用型を拡張することができます。汎用の Where 句を含む拡張機能 で説明したように、汎用型を拡張して条件付きで機能を追加することもできます。


注意: 既存の型に新しい機能を追加するために拡張機能を定義すると、拡張機能が定義される前にそれらが作成された場合でも、その型のすべての既存のインスタンス上で新しい機能が利用できるようになります。


計算されたプロパティ


拡張機能は、既存の型に、計算されたインスタンスプロパティと計算された型プロパティを追加できます。この例では、距離の単位を扱うための基本的なサポートを提供するために、Swift の組み込み Double 型に5つの計算されたインスタンスプロパティを追加します。


  1. extension Double {
  2.         var km: Double { return self * 1_000.0 }
  3.         var m: Double { return self }
  4.         var cm: Double { return self / 100.0 }
  5.         var mm: Double { return self / 1_000.0 }
  6.         var ft: Double { return self / 3.28084 }
  7. }
  8. let oneInch = 25.4.mm
  9. print("One inch is \(oneInch) meters")
  10. // prints "One inch is 0.0254 meters"
  11. let threeFeet = 3.ft
  12. print("Three feet is \(threeFeet) meters")
  13. // prints "Three feet is 0.914399970739201 meters"


これらの計算されたプロパティは、長さの特定の単位として考えられるべき Double 値を表します。それらは計算されたプロパティとして実装されていますが、これらのプロパティの名前は、距離の変換を実行するために、 そのリテラル値を使用する方法として、ドット構文を持つ浮動小数点リテラル値に追加できます。


この例では、1.0Double 値は "1メートル" を表すと考えられます。これは、m の計算されたプロパティが self を返し、式 1.m1.0Double 値を計算するとみなされるためです。


他の単位はメートルで測定した値として表現するためにいくつかの変換が必要です。1 キロメートルは、1000 メートルと同じで、km の計算されたプロパティはメートルで表した数値に変換するため 1_000.00 の値を乗算します。同様に、1メートルは 3.28024 フィートであり、フィートをメートルに変換するには ft の計算されたプロパティは 3.28084 で基本的な Double 値を ft の除算します。


これらのプロパティは、読み取り専用の計算されたプロパティで、したがってそれらは簡潔にするために、get キーワードなしで表現されます。それらの戻り値は Double 型であり、Double が受け入れられる場所ならどこでも数学的計算の中で使用できます:


  1. let aMarathon = 42.km + 195.m
  2. print("A marathon is \(aMarathon) meters long")
  3. // prints "A marathon is 42195.0 meters long"


注意: 拡張機能は、新しい計算されたプロパティを追加できますが、格納されたプロパティを追加したり、既存のプロパティにプロパティ監視者は追加できません。


イニシャライザ


拡張機能は、既存の型に新しいイニシャライザを追加できます。これは、イニシャライザ・パラメータとして独自のカスタム型を受け入れるように他の型を拡張する事を可能にし、または型のオリジナルの実装の一部としては含まれていなかった追加の初期化オプションを提供できます。


拡張機能は、クラスに新しいコンビニエンス・イニシャライザを追加できますが、クラスに新しい指定イニシャライザまたはデイニシャライザの追加はできません。指定イニシャライザとデイニシャライザは、常にオリジナルのクラスの実装によって提供されなければなりません。



注意: すべての格納されたプロパティのデフォルト値を提供し、全てのカスタムイニシャライザを定義していない値型へのイニシャライザを追加するのに拡張機能を使用する場合は、拡張機能のイニシャライザ内からその値型のデフォルトのイニシャライザとメンバー化イニシャライザを呼び出すことができます。

値型のイニシャライザデリゲート で説明したように、値型のオリジナルの実装の一部としてイニシャライザを書いていた場合には、これは当てはまりません。


以下の例では、幾何学的な長方形を表すためにカスタムの Rect 構造体を定義しています。また、この例では、SizePoint と言う、2つのサポートする構造体も定義しており、どちらも全てのプロパティに 0.0 のデフォルト値を提供しています。


  1. struct Size {
  2.         var width = 0.0, height = 0.0
  3. }
  4. struct Point {
  5.         var x = 0.0, y = 0.0
  6. }
  7. struct Rect {
  8.         var origin = Point()
  9.         var size = Size()
  10. }


Rect 構造体は、すべてのプロパティのデフォルト値を提供するので、それは デフォルトのイニシャライザ で説明したように、自動的にデフォルトのイニシャライザとメンバー化イニシャライザを受け取ります。これらのイニシャライザは、新しい Rect インスタンスを作成するために使用できます:


  1. let defaultRect = Rect()
  2. let memberwiseRect = Rect(origin: Point(x: 2.0, y: 2.0),
  3.         size: Size(width: 5.0, height: 5.0))


特定の中心点とサイズを取る追加のイニシャライザを提供するために、Rect 構造体を拡張できます。


  1. extension Rect {
  2.         init(center: Point, size: Size) {
  3.                 let originX = center.x - (size.width / 2)
  4.                 let originY = center.y - (size.height / 2)
  5.                 self.init(origin: Point(x: originX, y: originY), size: size)
  6.         }
  7. }


この新しいイニシャライザは、提供された center の点と size の値に基づいて、適切な原点を計算することで始まります。イニシャライザは、その後適切なプロパティに新しい原点とサイズの値を格納する、構造体の自動化したメンバー化イニシャライザ init(orgin:size:) を呼び出します。


  1. let centerRect = Rect(center: Point(x: 4.0, y: 4.0),
  2.         size: Size(width: 3.0, height: 3.0))
  3. // centerRect's origin is (2.5, 2.5) and its size is (3.0, 3.0)


注意: 拡張機能を持つ新しいイニシャライザを提供する場合でも、あなたにはイニシャライザが完了するやいなや、各インスタンスは完全に初期化されていることを確認する責任があります。


メソッド


拡張機能は、既存の型に新しいインスタンスメソッドと型メソッドを追加できます。以下の例では、Int 型に repetitions と言う新しいインスタンスメソッドを追加しています。


  1. extension Int {
  2.         func repetitions(task: () -> Void) {
  3.                 for _ in 0..<self {
  4.                         task()
  5.                 }
  6.         }
  7. }


repetitions(task:) メソッドは、() -> Void 型の一つの引数を取り、パラメータのない、戻り値のない関数である事を示しています。


この拡張機能を定義した後、何回でも多くの回数タスクを実行するために任意の整数で repetitions(task:) メソッドを呼び出すことができます。


  1. 3.repetitions{
  2.         print("Hello!")
  3. }
  4. // Hello!
  5. // Hello!
  6. // Hello!


変異インスタンスメソッド


拡張機能で加わったインスタンス・メソッドは、インスタンス自体を変更 (または 変異) することもできます。self を変更する構造体と列挙型のメソッド、またはそのプロパティはちょうどオリジナルの実装からメソッドを変異するように、mutating でインスタンス・メソッドをマークしなければなりません。


以下の例では、Swift の Int 型に、square (自乗) と言う新しい変異メソッドを追加し、それはオリジナルの値を自乗します:


  1. extension Int {
  2.         mutating func square() {
  3.                 self = self * self
  4.         }
  5. }
  6. var someInt = 3
  7. someInt.square()
  8. // someInt is now 9


サブスクリプト


拡張機能は、既存の型に新しいサブスクリプトを追加できます。この例では、Swift の組み込み Int 型に整数のサブスクリプト (添字) を追加します。このサブスクリプト [n] は、番号の右側から、十進数で n 番目の数字を返します。



...などなど:


  1. extension Int {
  2.         subscript(digitIndex: Int) -> Int {
  3.                 var decimalBase = 1
  4.                 for _ in 0..<digitIndex {
  5.                 decimalBase *= 10
  6.                 }
  7.                 return (self / decimalBase) % 10
  8.         }
  9. }
  10. 746381295[0]
  11. // returns 5
  12. 746381295[1]
  13. // returns 9
  14. 746381295[2]
  15. // returns 2
  16. 746381295[8]
  17. // returns 7


Int 値が要求されたインデックスに対して十分な桁数を持っていない場合は、数字が左に 0 で埋められたかのように、サブスクリプトの実装は、0 を返します。


  1. 746381295[9]
  2. // returns 0, as if you had requested:
  3. 0746381295[9]


ネストした型


拡張機能は、既存のクラス、構造体及び列挙型に新しいネストした型を追加できます。


  1. extension Int {
  2.         enum Kind {
  3.                 case negative, zero, positive
  4.         }
  5.         var kind: Kind {
  6.                 switch self {
  7.                 case 0:
  8.                         return .zero
  9.                 case let x where x > 0:
  10.                         return .positive
  11.                 default:
  12.                         return .negative
  13.                 }
  14.         }
  15. }


この例では、Int に新たなネストした列挙型を追加しています。Kind と言うこの列挙型は、特定の整数が表す数字の種類を表現します。具体的には、数字は、負か、ゼロ、または正かを表します。


またこの例では、その整数に対する適切な Kind の列挙型 case を返すように、kind と言う Int に新しい計算されたインスタンスプロパティを追加します。


ネストした列挙型は、任意の Int 値で使用できるようになります。


  1. func printIntegerKinds(_ numbers: [Int]) {
  2.         for number in numbers {
  3.                 switch number.kind {
  4.                 case .negative:
  5.                         print("- ", terminator: "")
  6.                 case .zero:
  7.                         print("0 ", terminator: "")
  8.                 case .positive:
  9.                         print("+ ", terminator: "")
  10.                 }
  11.         }
  12.         print("")
  13. }
  14. printIntegerKinds([3, 19, -27, 0, -6, 0, 7])
  15. // prints "+ + - 0 - 0 +"


この関数、printIntegerKinds(_:) は、Int 値の入力配列を取り、順番にそれらの値を反復して処理します。配列内の各整数の場合、関数はその整数の kind の計算されたプロパティを考慮し、適切な説明を出力します。


注意: number.kind は既に Int.Kind 値であることがわかっています。このため、Int.Kind case 値のすべては、Int.Kind.negative ではなく、.negative のように、switch 文の中では省略形で書くことができます。





前:ネストした型 次:プロトコル
目次
Xcode 9 の新機能

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 句
    汎用引数句
  • 文法のまとめ
  • 語彙の構造



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