Swift では、型には2種類あります:名前付きの型と複合型です。名前付きの型 は、それが定義されるときに、特定の名前を付けることができる型です。名前付きの型には、クラス、構造体、列挙型、およびプロトコルが含まれます。たとえば、MyClass という名前のユーザー定義のクラスのインスタンスは、MyClass 型です。ユーザー定義の名前付きの型に加えて、Swift 標準ライブラリは、配列、辞書、および optional の値を表すものも含めて、多くの一般的に使用される名前付きの型を定義しています。


通常他の言語で基本的なまたは原始的と考えられているデータ型は、数字、文字、そして文字列を表現する型のように、それらは実際には、名前付きの型であり、構造体を使用して Swift 標準ライブラリで定義され、実装されています。それらは名前付きの型なので、拡張機能拡張機能の宣言 で述べたように、拡張機能の宣言を使用して、プログラムのニーズに合わせて動作を拡張できます。


複合型 は、Swift 言語自体で定義された名前のない型です。関数型とタプル型の2つの複合型があります。複合型は、名前付きの型および他の複合型を含みます。例えば、タプル型 (Int, (Int, Int)) は2つの要素を含みます。最初は、名前付きの Int 型であり、第二は、他の複合型 (Int, Int) です。


名前付きの型または複合型のまわりに括弧を付けることができます。ただし、型の周りに括弧を追加しても効果はありません。たとえば、(Int)Int と等価です。


この章では、Swift 言語自体で定義された型について議論し、Swift の型推論の動作について説明します。


型の文法

typearray-type
typedictionary-type
typefunction-type
typetype-identifier
type →­ tuple-type
typeoptional-type
typeimplicitly-unwrapped-optional-type
typeprotocol-composition-type
typemetatype-type­
typeAny
typeSelf
type → ( type )



型注釈


型注釈 は、明示的に変数や式の型を指定します。以下の例のように、型注釈は、コロン (:) で始まり、型で終わります:


  1. let someTuple: (Double, Double) = (3.14159, 2.71828)
  2. func someFunction(a: Int) { /* ... */ }


最初の例では、式 someTuple はタプル型 (Double, Double) を持つように指定されています。第二の例では、関数 someFunction へのパラメータ aInt 型を持つように指定されています。


型注釈は、型の前の型属性の optional のリストを含みます。


型注釈の文法

type-annotation: attributes ­opt inout ­opt ­type



型識別子


型識別子は、名前付きの型または名前付きまたは複合型の、型エイリアスのいずれかへの参照です。


ほとんどの場合、型識別子は直接識別子と同じ名前を持つ名前付きの型を参照します。たとえば、Int は直接 Int の名前付きの型を参照する型識別子であり、また型識別子 Dictionary <String, Int> は、直接名前付きの型 Dictionary <String, Int> を参照します。


型識別子が同じ名前の型を参照しない2つの場合があります。最初の場合は、型識別子が名前付きまたは複合型の、型エイリアスを参照する場合です。たとえば、以下の例では、型注釈における Point の使用はタプル型 (Int, Int) を参照します。


  1. typealias Point = (Int, Int)
  2. let origin: Point = (0, 0)


第二の場合は、型識別子は、他のモジュールで宣言されたか、または他の型の中でネストした名前付きの型を参照するために、ドット (.) 構文を使用する場合です。たとえば、以下のコードの型識別子は ExampleModule のモジュール内で宣言された名前付きの型 MyType を参照します。


var someValue: ExampleModule.MyType



型識別子の文法

type-identifiertype-name generic-argument-clause opt | type-name generic-argument-clause opt ­. ­type-identifier
type-nameidentifier



タプル型


タプル型は、括弧で囲まれた、カンマ区切りの型のリストです。


複数の値を含む一つのタプルを返すように関数に許可するには、関数の戻り値の型としてタプル型を使用できます。また、タプル型の要素に名前を付け、個々の要素の値を参照するためにそれらの名前を使用できます。要素名は、識別子の直後にコロン (:) を続けて構成されます。これらの機能の両方の例を見るには、複数の戻り値を持つ関数 を参照してください。


タプル型の要素が名前を持っている場合、その名前は、型の一部です。


  1. var someTuple = (top: 10, bottom: 12)    // someTuple is of type (top: Int, bottom: Int)
  2. someTuple = (top: 4, bottom: 42) // OK: names match
  3. someTuple = (9, 99)                      // OK: names are inferred
  4. someTuple = (left: 5, right: 5)    // Error: names don't match


すべてのタプル型は、空のタプル型 () の型エイリアスである Void を除いて、2つ以上の型を含んでいます。


タプル型の文法

tuple-type → ( ) | ( tuple-type-element , ­tuple-type-element-list­ )
tuple-type-element-listtuple-type-element | tuple-type-element ­, ­tuple-type-element-list
tuple-type-elementelement-name ­type-annotation | type
element-nameidentifier




関数型


関数型は、関数、メソッド、またはクロージャの型を表し、矢印 (->) で区切られたパラメータと戻り値の型で構成されています:


() ->



パラメータ型 は、型のカンマ区切りしたリストです。戻り値の型 は、タプル型にできるので、関数型は、複数の値を返す関数やメソッドをサポートしています。


関数型のパラメータ () ->(T は任意の型) は暗黙のうちにその呼び出す場所でクロージャを作成するため autoclosure 属性を適用できます。これは、関数を呼び出すときに、明示的なクロージャを書く事を必要とせずに式の評価を延期する、構文的に便利な方法を提供します。autoclosure 関数型パラメータの例については、オートクロージャ を参照してください。


関数型は、その パラメータ型 内に可変個引数パラメータを持つことができます。構文的には、可変個引数パラメータは、基本型名で構成され、Int... のように3つのドット( ...) が直後に続きます。可変個引数パラメータは、基本型名の要素を含む配列として扱われます。例えば、可変個引数パラメータ Int... は、[INT] として扱われます。可変個引数パラメータを使用する例については、可変個パラメータ を参照してください。


in-out パラメータを指定するには、inout キーワードをパラメータ型の前に付けます。inout キーワードで可変個引数のパラメータや戻り値の型をマークすることはできません。in-out パラメータは、In-Out パラメータ で説明されています。


関数型が1つのパラメータしか持たず、そのパラメータ型がタプル型である場合、その関数型を書くときにタプル型は括弧で囲む必要があります。たとえば、((Int,Int)) -> Void は、タプル型 (Int,Int) の単一のパラメータを取り、値を返さない関数型です。対照的に、括弧なしでは、(Int,Int) -> Void は、2 つの Int パラメータを取り、値を返さない関数型です。同様に、Void() の型エイリアスであるため、関数型 (Void) -> Void は空のタプルである単一の引数を取る関数 (()) -> () と同じです。これらの型は () -> () の引数をとらない関数と同じではありません。


関数及びメソッド内の引数名は、対応する関数型の一部ではありません。例えば:


  1. func someFunction(left: Int, right: Int) {}
  2. func anotherFunction(left: Int, right: Int) {}
  3. func functionWithDifferentLabels(top: Int, bottom: Int) {}
  4. var f = someFunction // The type of f is (Int, Int) -> Void, not (left: Int, right: Int) -> Void.
  5. f = anotherFunction                      // OK
  6. f = functionWithDifferentLabels // OK
  7. func functionWithDifferentArgumentTypes(left: Int, right: String) {}
  8. f = functionWithDifferentArgumentTypes        // Error
  9. func functionWithDifferentNumberOfArguments(left: Int, right: Int, top: Int) {}
  10. f = functionWithDifferentNumberOfArguments // Error


引数のラベルは関数型の一部ではないので、関数型を記述する際に省略できます。


  1. var operation: (lhs: Int, rhs: Int) -> Int        // Error
  2. var operation: (_ lhs: Int, _ rhs: Int) -> Int   // OK
  3. var operation: (Int, Int) -> Int                       // OK


関数型が、一つ以上の矢印(->) を含んでいる場合は、関数型は、右から左にグループ化されます。例えば、関数型 (Int) -> (Int) ->Int(Int) -> ((Int) -> Int) として理解されます。つまり、Int を取り、Int を取って返す別の関数を返す関数です。


エラーを throw できる関数型は、throws キーワードでマークされなければならず、またエラーを rethrow できる関数型も、rethrows キーワードでマークされなければなりません。throws キーワードは、関数型の一部であり、また throw しない関数は、throw する関数のサブタイプです。その結果、throw しない関数を、同じ場所で throw する関数として使用できます。throw と rethrow する関数は、Throw する関数とメソッド および Rethrow する関数とメソッド で説明しています。


エスケープしないクロージャの制限事項


エスケープしない関数であるパラメータは、別のエスケープしない関数パラメータに引数として渡すことはできません。この制限により、実行時ではなくコンパイル時にメモリへのアクセスの競合をチェックするために Swift がより多くのチェックを実行できます。例えば:


  1. let external: (Any) -> Void = { _ in () }
  2. func takesTwoFunctions(first: (Any) -> Void, second: (Any) -> Void) {
  3.         first(first)          // Error
  4.         second(second) // Error
  5.         first(second)       // Error
  6.         second(first)        // Error
  7.         first(external)      // OK
  8.         external(first)      // OK
  9. }


上に挙げたコードでは、takesTwoFunctions(first:second:) への両方のパラメータが関数です。いずれのパラメータも @escaping とマークされていないので、いずれもエスケープされていません。


上に挙げた例で "Error" とマークされた 4 つの関数呼び出しは、コンパイラエラーを引き起こします。firstsecond のパラメータはエスケープされていない関数なので、別のエスケープされていない関数にパラメータ引数として渡すことはできません。対照的に、"OK" とマークされた 2 つの関数呼び出しはコンパイラエラーを引き起こしません。これらの関数呼び出しは、externaltakesTwoFunctions(first:second:) のパラメータの 1 つではないため、制限に違反しません。


この制限を回避する必要がある場合は、パラメータの 1 つを escaping としてマークするか、または、withoutActuallyEscaping(_:do:) 関数を使用してエスケープする関数にエスケープしない関数パラメータを一時的に変換します。メモリへのアクセスの競合を回避する方法については、メモリの安全性 を参照してください。


関数型の文法

function-typeattributes ­opt ­function-type-argument-clause ­throws ­opt ­-> ­type
function-typeattributes ­opt ­­function-type-argument-clause ­rethrows ­-> ­type

function-type-argument-clause → (­)­
function-type-argument-clause → ( function-type-argument-list ­... ­opt )
­
function-type-argument-listfunction-type-argument | function-type-argument ­, function-type-argument-list
­ function-type-argumentattributes ­opt ­inout ­opt ­type | argument-label ­type-annotation­
argument-labelidentifier



配列型


Swift 言語は Swift 標準ライブラリの Array<Element> 型について、以下のシンタックスシュガーを提供します。


[]


言い換えると、以下の2つの宣言は等価です。


  1. let someArray: Array<String> = ["Alex", "Brian", "Dave"]
  2. let someArray: [String] = ["Alex", "Brian", "Dave"]


どちらの場合も、定数の someArray は文字列の配列として宣言されています。配列の要素は、角括弧内の有効なインデックス値を指定することで、サブスクリプトを使用してアクセスできます:someArray[0] は、インデックス 0 の、"Alex" の要素を参照しています:


要素の基本型の名前は角括弧の最も内側のペアの中に含まれており、角括弧のペアを入れ子にすることで、多次元配列を作成できます。たとえば、角括弧の3つのセットを使用して、整数の3次元配列を作成できます。


var array3D: [[[Int]]] = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]



多次元配列内の要素にアクセスする場合、一番左のサブスクリプト・インデックスは、最も外側の配列内のそのインデックスにある要素を参照します。次の右へのサブスクリプト・インデックスは、一つの入れ子になったレベルを入った、配列内のそのインデックスにある要素を参照します、などなど。これは、上記の例では、array3D[0][[1, 2], [3, 4]] を参照し、array3D[0][1] は、 [3,4] を参照し、および array3D[0][1][1] は値4を参照します。


Swift 標準ライブラリの Array 型の詳細な議論については、配列 を参照してください。


配列型の文法

array-type → [ ­type ­]



辞書型


Swift 言語は Swift 標準ライブラリの Dictionary<Key, Value> 型について、以下のシンタックスシュガーを提供しています。


[: ]



言い換えると、以下の2つの宣言は等価です。


  1. let someDictionary: [String: Int] = ["Alex": 31, "Paul": 39]
  2. let someDictionary: Dictionary<String, Int> = ["Alex": 31, "Paul": 39]


どちらの場合も、定数の someDictionary は、キーとして文字列を、値として整数を持つ辞書として宣言されています。


辞書の値は、角括弧の中に対応するキーを指定し、サブスクリプトを使用してアクセスできます:someDictionary["Alex"] は、キー "Alex" に関連した値を参照しています。サブスクリプトは、辞書の値型の optional の値を返します。指定されたキーが辞書に含まれていない場合は、サブスクリプトは nil を返します。


辞書のキー型は、Swift 標準ライブラリの Hashable プロトコルに準拠しなければなりません。

Swift 標準ライブラリの Dictionary の型の詳細な議論については、Dictionary を参照してください。


辞書型の文法

dictionary-type → [ ­type­ : ­type­ ­]­



Optional の型


Swift 言語は接尾辞 ? を、Optional<Wrapped> という名前の型でシンタックスシュガーとして定義しており、それは Swift 標準ライブラリで定義されています。言い換えると、以下の2つの宣言は等価です:


  1. var optionalInteger: Int?
  2. var optionalInteger: Optional<Int>


どちらの場合も、変数 optionalInteger は optional の整数の型を持つように宣言されています。空白が型と ? の間に全く表示されない事に注意して下さい。


Optional<Wrapped> は、存在してもしなくてもよい値を表すために使用される2つのケース、none 及び some(Wrapped) から成る列挙型です。すべての型は、明示的に (または暗黙にそれに変換される) optional の型であると宣言されます。optional の変数またはプロパティを宣言するときに初期値を指定しない場合、その値は自動的にデフォルトで nil になります。


optional の型のインスタンスが値を含んでいる場合は、以下に示すように、接尾辞演算子 ! を使用してその値にアクセスできます:


  1. optionalInteger = 42
  2. optionalInteger! // 42


! 演算子を使用して、nil の値を持つ optional を開封すると、実行時エラーが起こります。


また、条件付きで optional の式で演算を実行するには、optional の連鎖と optional の結合も使用できます。値が nil の場合、何も演算は行われないため、実行時エラーは起こりません。


詳細および、optional の型を使用する方法を示す例については、Optionals を参照してください。


Optional の型の文法

optional-typetype ­?




暗黙に開封された Optional の型


Swift 言語は、接尾辞 ! を、Optional<Wrapped> の名前付きの型のシンタックスシュガーとして定義しており、それは Swift 標準ライブラリで定義されていて、それがアクセスされたときに、自動的に開封されるという動作の追加がされています。nil の値を持つ暗黙的に開封された optional を使用しようとすると、実行時エラーが発生します。暗黙の開封動作を例外として、以下の 2 つの宣言は等価です。


  1. var implicitlyUnwrappedString: String!
  2. var explicitlyUnwrappedString: Optional<String>


型と ! との間に空白が全く表示されないことに注意してください。


暗黙の開封は、その型を含む宣言の意味を変化させるため、タプル型または汎用型の中に入れ子にされた optional 型、例えば辞書や配列の要素型は、暗黙的に開封されたとしてマークすることはできません。 例えば:


  1. let tupleOfImplicitlyUnwrappedElements: (Int!, Int!) // Error
  2. let implicitlyUnwrappedTuple: (Int, Int)!                 // OK
  3. let arrayOfImplicitlyUnwrappedElements: [Int!]                // Error
  4. let implicitlyUnwrappedArray: [Int]!                        // OK


暗黙的に開封された optional は同じ optional<Wrapped> 型を optional の値として持っているので、optional を使用できるあなたのコード内のすべての同じ場所で暗黙的に開封された optional を使用できます。たとえば、変数、定数、および optional のプロパティに暗黙的に開封された optional の値を割り当てる事ができ、またその逆ができます。


optional と同様に、暗黙的に開封された optional の変数またはプロパティを宣言する時に初期値を指定しない場合は、その値は自動的にデフォルトで nil になります。


条件付きで暗黙的に開封された optional の式で演算を実行するには、optional の連鎖を使用してください。値が nil の場合、演算は何も行われないため、実行時エラーは何も生成されません。


暗黙的に開封された optional の型の詳細については、暗黙に開封された Optional を参照してください。


暗黙に開封された optional の型の文法

implicitly-unwrapped-optional-typetype ­!

­

プロトコルを構成する型


プロトコルを構成する型は、指定されたプロトコルのリスト内の各プロトコルに準拠する型、または与えられたクラスのサブクラスであり、指定されたプロトコルのリスト内の各プロトコルに準拠する型を定義します。プロトコルを構成する型は、型注釈、汎用パラメータ句、および汎用 where 句で型を指定する場合にのみ使用できます。


プロトコルを構成する型は以下の形式です:


&



プロトコルを構成する型は、型を準拠させたい各プロトコルから継承する新しい、名前の付いたプロトコルを明示的に定義することなく、複数のプロトコルの要件に準拠する値の型を指定することができます。例えば、ProtocolA,ProtocolB および ProtocolC から継承する新しいプロトコルを宣言するのではなく、プロトコルを構成する型 ProtocolA & ProtocolB & ProtocolC を使用できます。同様に、SuperClass のサブクラスであり、ProtocolA に準拠する新しいプロトコルを宣言する代わりに、SuperClass & ProtocolA を使用することができます。


プロトコルを構成するリストの各項目は、以下のうち1つです。リストには最大で 1 つのクラスを含めることができます。


プロトコルを構成する型に型エイリアスが含まれる場合、同じプロトコルが定義内に複数回表示される事は可能であり、重複は無視されます。たとえば、以下のコードの PQR の定義は P & Q & R と同等です。


  1. typealias PQ = P & Q
  2. typealias PQR = PQ & Q & R


Protocol を構成する型の文法

protocol-composition-typetype-identifier & ­protocol-composition-continuation
protocol-composition-continuationtype-identifier ­| protocol-composition-type



メタタイプ型


メタタイプ型は、クラス型、構造体型、列挙型、及びプロトコル型を含む全ての型を参照します。


クラス、構造体、または列挙型のメタタイプは、その型の名前の後、.Type が続きます。プロトコル型のメタタイプー実行時のプロトコルに準拠する、具体的な型ではないーは、そのプロトコルの名前の後 .Protocol が続きます。例えば、クラス型 SomeClass のメタタイプは SomeClass.Type で、プロトコル SomeProtocol のメタタイプは SomeProtocol.Protocol です。


値として型にアクセスするために、接尾辞 self の表現を使用できます。たとえば、 SomeClass.selfSomeClass それ自体を返し、SomeClass のインスタンスを返すのではありません。また SomeProtocol.selfSomeProtocol それ自体を返し、実行時に SomeProtocol に準拠した型のインスタンスを返すのではありません。以下の例に示すように、値として実行時の型に、インスタンスの動的にアクセスするための型のインスタンスで type(of:) 関数を呼び出す事ができます。


  1. class SomeBaseClass {
  2.         class func printClassName() {
  3.                 print("SomeBaseClass")
  4.         }
  5. }
  6. class SomeSubClass: SomeBaseClass {
  7.         override class func printClassName() {
  8.                 print("SomeSubClass")
  9.         }
  10. }
  11. let someInstance: SomeBaseClass = SomeSubClass()
  12. // someInstance is of type SomeBaseClass at compile time, but
  13. // someInstance is of type SomeSubClass at runtime
  14. type(of: someInstance).printClassName()
  15. // prints "SomeSubClass"


詳細については、Swift 標準ライブラリの type(of:) を参照してください。


その型のメタタイプ値から型のインスタンスを構築するには、イニシャライザー式を使用します。クラスインスタンスの場合、呼び出されるイニシャライザーは、required キーワードでマークするか、final キーワードでクラス全体をマークしなければなりません。


  1. class AnotherSubClass: SomeBaseClass {
  2.         let string: String
  3.         required init(string: String) {
  4.                 self.string = string
  5.         }
  6.         override class func printClassName() {
  7.                 print("AnotherSubClass")
  8.         }
  9. }
  10. let metatype: AnotherSubClass.Type = AnotherSubClass.self
  11. let anotherInstance = metatype.init(string: "some string")


メタタイプ型の文法

metatype-typetype ­. ­Typetype ­. ­Protocol



型の継承句


型の継承句は、名前付きの型がどのクラスから継承し、名前付きの型がどのプロトコルに準拠するかを指定するために使用されます。型の継承句は、コロン (:)で始まり、型識別子のリストが続きます。


クラス型は、一つののスーパークラスから継承し、いくつものプロトコルに準拠することができます。クラスを定義する場合、スーパークラスの名前は、最初に型識別子のリストが表示され、クラスが準拠しなければならないいくつものプロトコルが続かなければなりません。クラスが別のクラスから継承していない場合、このリストは、代わりにプロトコルで始めることができます。より深い議論とクラス継承のいくつかの例については、継承 を参照してください。


他の名前付きの型は、プロトコルのリストからのみ継承またはそれに準拠することができます。プロトコル型は、他のプロトコルからいくつでも継承できます。プロトコル型が他のプロトコルから継承する場合、それら他のプロトコルからの一連の要件は一緒に集約され、現在のプロトコルから継承する全ての型は、これらの要件のすべてに準拠しなければなりません。


列挙型定義における型の継承句は、プロトコルのリスト、またはその場合への生の値を指定する列挙型の場合、それらの生の値の型を指定する一つの名前付きの型のいずれかです。その生の値の型を指定する、型の継承句を使用して列挙型を定義する例については、生の値 を参照してください。


型の継承句の文法

type-inheritance-clause: ­type-inheritance-list
type-inheritance-listtype-identifiertype-identifier ­, ­type-inheritance-list
­


型の推測


Swift は、コード内で多くの変数や式の型の一部または型を省略できるように、広範囲に型の推測を使用します。たとえば、var x: Int = 0 と書く代わりに、var x = 0 と書いて、完全に型を省略でき、コンパイラは正しく、x の名前が Int 型の値であると推測書できます。同様に、完全な型が文脈から推測できる場合も、型の一部を省略できます。たとえば、let dict: Dictionary = ["A": 1] と書く場合、コンパイラは dictDictionary<String, Int> の型であることを推測します。


上記の例のいずれにおいても、型の情報は、式ツリーの葉からそのルート(根) に渡されます。つまり、var x: Int = 0x の型は、最初 0 の型をチェックして、ルート(変数 x) まで、この型の情報を渡すことによって推測されます。


Swift では、型の情報は、反対方向にも流れますールート(根) から葉に。例えば、以下の例では、定数 eFloat 上の明示的な型注釈 (: Float) は、Double の代わりに Float の推測された型を持つ 2.71828 の数値リテラルとなります。


  1. let e = 2.71828 // The type of e is inferred to be Double.
  2. let eFloat: Float = 2.71828 // The type of eFloat is Float.


Swift における型推測は、一つの式または文のレベルで動作します。これは、式の中で省略された型または型の一部を推測するために必要なすべての情報は、式の型チェックまたはその部分式の一つからアクセス可能でなければならないことを意味します。





前:語彙の構造 次:式
目次
Xcode 10 の新機能

Swift:はじめに
Swift と Cocoa と Objective-C
Swift Blog より
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 句
    汎用引数句
  • 文法のまとめ
  • 語彙の構造



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