magazine.gif 詳解Swift

はじめに

CHAPTER01 Swiftでプログラミング

  • 1.1 データ型と変数
    • Swiftのデータ型
    • 整数と実数を表す型
    • 論理型、文字型と文字列型
    • 変数と定数
    • 変数の定義
    • 定数の定義
    • 変数と型
    • 文字列
    • 演算子の種類
    • 演算子の記述に関する注意
    • 識別子
    • 型に別名を付ける
    • 型パラメータ
    • モジュールのインポート
    • 名前空間
    • コメント
  • 1.2 制御構文
    • if文
    • while文
    • do-while文
    • print文
    • for文
    • for-in文
    • switch文
    • ラベル付きのループ文
    • assert
  • 1.3 簡単な実行方法
    • プレイグラウンド
    • Swift処理系をコマンドラインから使う
    • コマンドラインから対話的に利用する
    • ソースプログラムをコンパイルする
    • ソースコードを解釈実行する
    • 複数のソースファイルからなるプログラムをコンパイルする

CHAPTER02 関数

  • 2.1 関数定義の基本
    • 関数定義の概要
    • inout引数
    • 外部引数名
    • 関数定義における下線の特殊な用法
    • 関数の引数に既定値を指定する
    • 引数の値を処理中に変更できるようにする
    • 関数内の関数
    • 関数の呼び出し関係
  • 2.2 オーバーロード
    • オーバーロードとは
    • 外部引数を使ったオーバーロードの定義

CHAPTER03 構造体

  • 3.1 構造体の定義
    • 定義の概要
    • 構造体の初期化
    • 全項目イニシャライザ
    • 構造体の定数プロパティ
    • イニシャライザの定義
    • 複数個のイニシャライザを定義する
    • 他の構造体を含む構造体
    • ネストした構造体の定義
  • 3.2 メソッド
    • インスタンスに対するメソッドの定義
    • 構造体の内容を変更するメソッド
    • タイプメソッド
  • 3.3 プロパティ
    • プロパティの種類
    • タイププロパティ
    • 計算型プロパティ
    • 関数のinout引数にプロパティを渡す
    • get節で格納型プロパティを変更する場合
    • グローバルなスコープを持つ計算型プロパティの定義
    • プロパティオブザーバ
  • 3.4 添字付け
    • 添字付けとは
    • 2次元以上の添字付け

CHAPTER04 オプショナル

  • 4.1 オプショナル型
    • オプショナル型とnil
    • オプショナル型の値を開示する
    • 条件判定とオプショナル型
    • オプショナル束縛構文
    • nil併合演算子
  • 4.2 暗黙的開示オプショナル型
    • 暗黙的開示オプショナル型とは
    • 暗黙的開示オプショナル型と関数
    • 関数のinout引数に指定する
  • 4.3 失敗のあるイニシャライザ
    • イニシャライザで正しく処理ができない場合
    • 失敗のあるイニシャライザの定義
    • 暗黙的開示オプショナル型を返すイニシャライザ

CHAPTER05 基本的なデータ型

  • 5.1 整数と実数
    • 数値を表すデータ型
    • 数値型のリテラル
    • 数値型のメソッドやプロパティ
    • 範囲型と区間型
    • Stride型
  • 5.2 文字列と文字
    • String型のイニシャライザ
    • String型のメソッド
    • String型のプロパティ
    • String型の演算子
    • 文字列の長さとNSStringへの変換
    • UnicodeScalar型
    • 合成された文字の問題
    • 識別子にUnicodeを使う場合の問題
  • 5.3 配列
    • コレクションと可変性
    • 配列の型宣言と初期値
    • 要素へのアクセス
    • 配列の比較
    • 部分配列
    • 配列のイニシャライザ
    • 配列のメソッド
    • 配列のプロパティ
    • 配列とfor-in文
    • 可変個の引数が利用できる関数
    • 多次元配列
    • オプショナル型による配列の空要素
  • 5.4 辞書
    • 辞書の型宣言と初期値
    • 辞書へのアクセス
    • 辞書のキーになれるデータ型
    • 辞書の比較
    • 辞書とfor-in文
    • 辞書のメソッドとプロパティ

CHAPTER06 パターン

  • 6.1 タプル
    • タプルの概要
    • タプルと代入操作
    • タプルを返す関数
    • キーワード付きのタプル
    • キーワード付きのタプルと代入
    • キーワード付きのタプルを返す関数
    • タプルをswitch文で使う
    • switch文でwhere節を使う
  • 6.2 列挙型
    • 列挙型の概要
    • メソッドの定義
    • 値型の列挙型
    • 列挙型に対するメソッドとプロパティ
    • 列挙型のタイプメソッド
    • 共用型の列挙型
    • 列挙型の付加情報を書き換えるメソッドとプロパティ
    • 共用型の列挙型と構造体を組み合わせる
  • 6.3 パターンマッチ
    • パターンマッチとは
    • パターンマッチのルール

CHAPTER07 演算子

  • 7.1 Swiftの演算子
    • 演算子の優先度
    • 演算子の結合規則
    • オーバーフロー演算子
    • 剰余演算子
    • ビット演算子と論演算子
    • nil併合演算子
  • 7.2 演算子の定義
    • 演算子の宣言と定義
    • 二項演算子の定義
    • 単項演算子の定義
    • 構造体に対する演算子の定義
    • パターンマッチ演算子
    • 短絡評価をする演算子の定義
    • 演算子の優先順位と計算の順序

CHAPTER08 クラスと演算子

  • 8.1 クラス定義
    • クラスの概要
    • クラスの継承
    • 継承によるクラス定義の例
    • 動的結合とキャスト
    • プロパティの継承
    • 添字付けの継承
    • 継承とプロパティオブザーバ
    • クラスメソッドとクラスプロパティ
    • 継承とメソッド呼び出し
    • 継承をさせない指定
    • Objective-Cのクラスを継承
    • 継承と型推論
  • 8.2 イニシャライザ
    • 指定イニシャライザと簡易イニシャライザ
    • 初期化の手順と守るべきルール
    • クラス継承の例題
    • 初期化は結局どう記述すればよいのか
    • イニシャライザの継承
    • 必須イニシャライザ
    • 失敗のあるイニシャライザと継承
  • 8.3 解放時処理
    • 解放時処理とデイニシャライザ
    • デイニシャライザの定義
    • デイニシャライザを使った例
  • 8.4 遅延格納型プロパティ
    • 遅延格納型プロパティとは
    • ファイルの属性を遅延評価する例題
  • 8.5 アクセス制御
    • 可視性の3つのレベル
    • アクセス制御の指定
    • クラス継承とアクセス制御
    • プロパティのアクセス制御

CHAPTER09 メモリ管理

  • 9.1 参照型データとARC
    • リファレンスカウンタの概念
    • ARCによるメモリ管理
    • 値型データの共有とコピー
  • 9.2 強い参照の循環
    • インスタンスが解放できない場合
    • 弱い継承
    • 非所有参照
  • 9.3 オプショナルチェーン
    • オプショナル型の値を連続利用する場合
    • オプショナルチェーンとは
    • オプショナルチェーンの型
    • 値を返さないメソッドの場合
    • オプショナルチェーンに対する代入
    • Swiftはthrow-catch構文がない

CHAPTER10 プロトコル

  • 10.1 プロトコルの宣言
    • プロトコルの概要と例
    • プロトコルで宣言できるもの
    • メソッドの宣言と定義
    • プロパティの宣言と定義
    • イニシャライザの宣言と定義
    • プロトコルの使用例
  • 10.2 プロトコルと型
    • 型としてのプロトコル
    • プロトコルの継承
    • プロトコルの合成
    • デリゲートと通知
  • 10.3 Objective-Cのプロトコル
    • Objective-Cのプロトコルを利用する
    • プロトコルへの適合をチェックする
    • オプショナル項目のあるプロトコルを宣言する
  • 10.4 プロトコルと付属型
    • ネスト型とプロトコル
    • 付属型が適合するプロトタイプを指定
  • 10.5 プロトコルに適合する型の定義方法
    • プロトコルに適合する型の定義方法
    • プロトコルEquatableとComparable
    • プロトコル定義におけるSelf
    • プロトコルForwardindexType
    • 継承のあるクラス定義でSelfを使う

CHAPTER11 拡張

  • 11.1 拡張の宣言
    • 拡張の概要
    • システムの既存の型に対する拡張定義の例
    • アクセス制御に関する注意
    • 拡張定義とイニシャライザ
    • 拡張定義と継承に関する注意
  • 11.2 拡張定義とプロトコルへの適合
    • プロトコルへの適合
    • プロトコルに適合するための定義がすでに存在する場合
    • プロトコルが演算子の定義を含む場合

CHAPTER12 クロージャ

  • 12.1 クロージャの宣言
    • クロージャの概要
    • クロージャの仮引数と返り値の型宣言
    • クロージャと関数の型
    • クロージャの複雑な型宣言
  • 12.2 変数のキャプチャ
    • キャプチャとは
    • クロージャが個別にローカル変数をキャプチャする場合
    • 複数のクロージャが同じローカル変数をキャプチャする場合
    • クロージャが参照型の変数をキャプチャする場合
    • ネスト関数とクロージャ
    • メソッドとクロージャ
    • 関数とクロージャ
  • 12.3 クロージャの使い方と記法
    • 引数リストの省略
    • 引数リスト自体の省略
    • 配列の整列
    • 配列要素の選択
    • 接尾クロージャ
    • 配列要素に対する操作
    • 関数のカリー化と部分適用
  • 12.4 クロージャと強い参照の循環
    • キャプチャによる強い参照
    • 弱い参照による解決は?
    • キャプチャリスト

CHAPTER13 ジェネリクス

  • 13.1 ジェネリクスの概要
    • ジェネリクスとは
    • ジェネリック関数の例
    • ジェネリックな型の例
    • ジェネリクスとプロトコル
  • 13.2 ジェネリック関数の定義
    • ジェネリック関数の定義
    • 関数の引数とタプル
  • 13.3 ジェネリクスによる型定義
    • 要素の重複が内配列の定義
    • 型パラメータの書き方
    • プロトコルの付属型
    • パラメータと付属型のマッチ
    • 要素の型をパラメータ化する
    • プロトコルSequenceTypeに適合させる

CHAPTER14 C/Objective-Cとのデータ受け渡し

  • 14.1 データ型の互換性
    • C言語の単純型とSwiftの型
    • C言語のポインタとSwiftの型
    • 変数を用意して関数の結果を書き込む
    • 配列を用意して関数に結果を書き込む
    • 返されたポインタから値を取り出す
    • コマンドラインの引数リストにアクセスする
    • UnsafeBufferPointer<T>を利用する
    • Cの標準関数と文字列
    • T**型の引数の扱い
  • 14.2 対応付けられたデータ型
    • 数値と数値オブジェクト
    • オブジェクト
    • 文字列
    • 配列
    • 辞書
    • NSValue
    • NSData
    • Core Foundation
  • 14.3 その他のデータ型とマクロ
    • 列挙型
    • 列挙定数を利用したビットフィールド
    • 各国語対応の文字列を得る
    • 関数ポインタ
    • マクロ定義
    • 条件付きコンパイル

CHAPTER15 Objective-Cとの連携

  • 15.1 SwiftとObjective-Cをビルドする
    • Xcodeの新プロジェクトをSwiftで作る
    • Objective-Cの情報をSwiftから参照する
    • Swiftの情報をObjective-Cから参照する
  • 15.2 Objective-Cのオブジェクトを使う
    • Objective-CとSwiftメソッドとイニシャライザ
    • Objective-CのクラスをSwiftから使う例
    • Objective-Cのプロパティに関する注意
    • Objective-Cのクラスを継承する
    • コマンドラインからコンパイルするには
  • 15.3 SwiftのクラスをObjective-Cで使えるようにする
    • Swiftのクラスとpobjc属性
    • SwiftとObjective-Cのクラスを互いに使う例
    • Objective-Cに見せる名前を指定する
    • GUI部品と結びつけて使う例
    • ターゲット&アクションの設定
  • 15.4 文書化コメント
    • Xcode向けのコメント
    • 文書化コメント

APPENDIX
APPENDIX A Swiftの標準ライブラリ

  • A.1 プロトコル
    • [型]LiteralConvertibleのグループ
    • 〜IndexTypeのグループ
    • 〜CollectionTypeのグループ
    • AbsoluteValuable
    • BitwiseOperationsType
    • BooleanType
    • Comparable
    • DebugPrintable
    • Equatable
    • FloatingPointType
    • GeneratorType
    • Hashable
    • IntegerType
    • MirrorType
    • OutputStreamType
    • Printable
    • Reflectable
    • SequenceType
    • SliceableおよびMutableSliceable
    • Streamable
    • Strideable
  • A.2 型
    • Bool
    • Character
    • DoubleおよびFloat
    • Int
    • String
    • UInt
    • UTF8、UTF16、UTF32
    • UnicodeScalar
  • A.3 ジェネリック型
    • Array<T>
    • ClosedInterval<T>およびHalfOpenInterval<T>
    • Dicitionary<Key: Hashable, Value>
    • ImplicitlyUnwrappedOptional<T>およびOptional<T>
    • Range<T: ForwardIndexType>
    • StrideThrough<T>およびStrideTo<T>
  • A.4 ポインタ型
    • AutoreleasingUnsafeMutablePointer<T>
    • CFunctionPointer<T>
    • COpaquePointer<T>
    • UnsafeMutablePointer<T>
    • UnsafePointer<T>
    • UnsafeBufferPointer<T>
    • UnsafeMutableBufferPointer<T>
  • A.5 関数
    • 算術演算、範囲、区間
    • コレクション
    • プリント
    • 実行環境とポインタ
    • デバッグ
    • その他
  • A.6 変数
    • C_ARGC/C_ARGV
    • 標準入出力
    • Unixのエラーコード
  • A.7 属性
    • @autoclosure属性
    • @availability属性
    • Interface Builderの属性
    • @noreturn属性
    • @NSApplicationMain属性
    • @NSCopy属性
    • @NSManaged属性
    • @objc属性
    • @UIApplicationMain属性

APPENDIX B Swiftの構造図

  • B.1 識別子で使える文字
    • [1]識別子の先頭に使える文字
    • [2]識別子に使える文字
    • [3]演算子の先頭に使える文字
    • [4]演算子の2文字目以降に使える文字
  • B.2 構文図

INDEX