WEB+DB PRESS plusシリーズ[改訂新版]Swift実践入門
── 直感的な文法と安全性を兼ね備えた言語

[表紙][改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語

紙版発売
電子版発売

A5判/464ページ

定価3,520円(本体3,200円+税10%)

ISBN 978-4-7741-9414-1

ただいま弊社在庫はございません。

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

本書は,Swiftの言語仕様と実践的な利用方法を解説した入門書です。改訂新版では,新バージョンのSwift 4に対応しました。

Swiftは簡潔な言語ですが,その言語仕様を理解し,正しく使うことはけっして容易ではありません。Appleの公式ドキュメントをはじめとして,どんな言語仕様があり,それらをどのように使うかに関しては豊富な情報源があります。しかし,それらがなぜ存在し,いつ使うべきかについてまとまった情報があるとは言えません。本書は,読者のみなさんの「なぜ」や「いつ」を解消することにも主眼を置いています。

本書では,はじめにSwiftの標準的な機能を一通り解説し,続いて型の設計指針や非同期処理,エラー処理などの実装パターンを説明します。最後に,実践的なSwiftアプリケーションの開発を通じて,それまでに説明した機能と実装パターンの具体的な活用方法を示します。

こんな方におすすめ

  • これからSwiftを学びたい方
  • Swiftのより実践的な知識を身に付けたい方

本書に関するお知らせ

本書に関連する記事を公開しております。

この書籍に関連する記事があります!

はじめに
本書は,Swiftの言語仕様と実践的な利用方法を解説した入門書です。

目次

  • はじめに
  • 謝辞
  • 改訂新版での更新点
  • サポートページ
  • 目次

第1章 Swiftはどのような言語か

1.1
言語の特徴

  • 静的型付き言語
  • nilの許容性をコントロール可能
  • 型推論による簡潔な記述
  • ジェネリクスによる汎用的な記述
  • Objective-Cと連携可能

1.2
macOSでの開発環境

  • Xcodeのインストール
  • コマンドラインでの実行方法
    • REPLによるインタラクティブな実行
    • swiftコマンドによるスクリプトの実行
    • swiftcコマンドによる実行ファイルの作成
  • Playgroundでの実行方法
    • Playgroundファイルの作成
    • エラーや警告の表示
    • アニメーションのプレビューなどのリッチな機能
  • iOS,macOSアプリケーションとしての実行方法
    • Xcodeプロジェクトの作成

1.3
Swiftのオープンソースプロジェクト

  • ライブラリ群
    • 標準ライブラリ ── 言語仕様の一部となるライブラリ
    • コアライブラリ ── 高機能な汎用ライブラリ
  • 開発ツール
    • Swift Package Manager ── ライブラリ管理ツール
    • LLDB ── デバッグツール

1.4
命名規則

  • 単語の区切り方
  • 単語の選び方

1.5
本書のサンプルコードの実行方法

1.6
本書の構成

1.7
まとめ

第2章 変数,定数と基本的な型

2.1
変数,定数,型による値の管理

2.2
変数と定数

  • 宣言方法
    • 型推論
    • 型の確認方法
    • 名前に使用可能な文字
    • 宣言時に型を決定する必要がある
  • 代入方法
    • 代入可能な値
    • 使用時までに値を代入しなければならない
    • 定数には再代入を行えない

2.3
スコープ ── 名前の有効範囲

  • ローカルスコープ ── 局所的に定義されるスコープ
  • グローバルスコープ ── プログラム全体から参照できるスコープ

2.4
Bool型 ── 真理値を表す型

  • 真理値リテラル
  • 論理演算
    • 否定
    • 論理積
    • 論理和

2.5
数値型 ── 数値を表す型

  • 数値リテラル
  • 数値型の種類
    • 整数型
    • 浮動小数点型
  • 数値型どうしの相互変換
  • 数値型の操作
    • 比較
    • 算術
    • Foundationによる高度な操作

2.6
String型 ── 文字列を表す型

  • 文字列リテラル
    • 特殊文字の表現
    • 文字列リテラル内での値の展開
    • 複数行の文字列リテラル
  • String型の個々の文字を表す型
    • Character型 ── 文字を表す型
    • String.Index型 ── String型の位置を表す型
  • 数値型との相互変換
  • String型とCharacter型の操作
    • 比較
    • 結合
    • Foundationによる高度な操作

2.7
Array<Element>型 ── 配列を表す型

  • 配列リテラル
    • 型推論
    • 要素にできる型
  • Array<Element>型の操作
    • 要素へのアクセス
    • 要素の更新,追加,結合,削除

2.8
Dictionary<Key, Value>型 ── 辞書を表す型

  • 辞書リテラル
    • 型推論
    • キーと値にできる型
  • Dictionary<Key, Value>型の操作
    • 値へのアクセス
    • 値の更新,追加,削除

2.9
範囲型 ── 範囲を表す型

  • 範囲演算子 ── 範囲を作る演算子
    • ..<演算子 ── 終了の値を含まない範囲を作る演算子
    • ...演算子 ── 終了の値を含む範囲を作る演算子
    • 型推論
    • 境界に使用可能な型
  • 範囲型の操作
    • 境界の値へのアクセス
    • 値が範囲に含まれるかどうかの判定

2.10
Optional<Wrapped>型 ── 値があるか空のいずれかを表す型

  • Optional<Wrapped>型の2つのケース ── 値の不在を表す.noneと,値の存在を表す.some
    • 型推論
  • Optional<Wrapped>型の値の生成
    • nilリテラルの代入による.noneの生成
    • イニシャライザによる.someの生成
    • 値の代入による.someの生成
  • Optional<Wrapped>型のアンラップ ── 値の取り出し
    • オプショナルバインディング ── if文による値の取り出し
    • ??演算子 ── 値が存在しない場合のデフォルト値を指定する演算子
    • 強制アンラップ ── !演算子によるOptional<Wrapped>型の値の取り出し
  • オプショナルチェイン ── アンラップを伴わずに値のプロパティやメソッドにアクセス
  • 暗黙的にアンラップされたOptional<Wrapped>型
  • 値の取り出し方法の使い分け

2.11
Any型 ── 任意の型を表す型

  • Any型への代入による型の損失

2.12
タプル型 ── 複数の型をまとめる型

  • 要素へのアクセス
    • インデックスによるアクセス
    • 要素名によるアクセス
    • 代入によるアクセス
  • Void型 ── 空のタプル

2.13
型のキャスト ── 別の型として扱う操作

  • 型の判定
  • アップキャスト ── 上位の型として扱う操作
  • ダウンキャスト ── 下位の型として扱う操作

2.14
まとめ

第3章 制御構文

3.1
プログラムの実行フローの制御

3.2
条件分岐

  • if文 ── 条件の成否による分岐
    • 条件式に使用できる型
    • else節 ── 条件不成立時の処理
    • if-let文 ── 値の有無による分岐
    • if-case文 ── パターンマッチによる分岐
  • guard文 ── 条件不成立時に早期退出する分岐
    • guard文のスコープ外への退出の強制
    • guard文で宣言された変数や定数がguard文の外で使用可能
    • if文との使い分け
  • switch文 ── 複数のパターンマッチによる分岐
    • ケースの網羅性チェック
    • defaultキーワード ── デフォルトケースによる網羅性の保証
    • whereキーワード ── ケースにマッチする条件の追加

3.3
繰り返し

  • for文 ── 要素の列挙
    • for-in文 ── すべての要素の列挙
    • for-case文 ── パターンマッチによって絞り込まれた要素の列挙
  • while文 ── 継続条件による繰り返し
    • repeat-while文 ── 初回実行を保証する繰り返し

3.4
プログラムの制御を移す文

  • fallthrough文 ── switch文の次のケースへの制御の移動
  • break文 ── switch文のケースの実行や繰り返しの中断
    • switch文のケースの実行の中断
    • 繰り返しの中断
  • continue文 ── 繰り返しの継続
  • ラベル ── break文やcontinue文の制御の移動先の指定

3.5
遅延実行

  • defer文 ── スコープ退出時の処理

3.6
パターンマッチ ── 値の構造や性質による評価

  • 式パターン ── ~=演算子による評価
  • バリューバインディングパターン ── 値の代入を伴う評価
  • 列挙型ケースパターン ── ケースとの一致の評価
    • 連想値のパターンマッチ
  • 型キャスティングパターン ── 型キャストによる評価
    • is演算子による型キャスティングパターン
    • as演算子による型キャスティングパターン

3.7
まとめ

第4章 関数とクロージャ

4.1
処理の再利用

4.2
関数 ── 名前を持ったひとまとまりの処理

  • 定義方法
  • 実行方法
  • 引数
    • 仮引数と実引数
    • 外部引数名と内部引数名
    • 外部引数名の省略
    • デフォルト引数 ── 引数のデフォルト値
    • インアウト引数 ── 関数外に変更を共有する引数
    • 可変長引数 ── 任意の個数の値を受け取る引数
    • コンパイラによる引数チェック
  • 戻り値
    • 戻り値がない関数
    • コンパイラによる戻り値チェック

4.3
クロージャ ── スコープ内の変数や定数を保持したひとまとまりの処理

  • 定義方法
    • 型推論
  • 実行方法
  • 引数
    • 簡略引数名 ── 引数名の省略
  • 戻り値
  • クロージャによる変数と定数のキャプチャ
  • 引数としてのクロージャ
    • 属性の指定方法
    • escaping属性 ── 非同期的に実行されるクロージャ
    • autoclosure属性 ── クロージャを用いた遅延評価
    • トレイリングクロージャ ── 引数のクロージャを()の外に記述する記法
  • クロージャとしての関数
  • クロージャ式を利用した変数や定数の初期化

4.4
まとめ

第5章 型の構成要素 ── プロパティ,イニシャライザ,メソッド

5.1
型に共通するもの

5.2
型の基本

  • 定義方法
    • インスタンス自身へのアクセス
    • インスタンス化の方法

5.3
プロパティ ── 型に紐付いた値

  • 定義方法
  • 紐付く対象による分類
    • インスタンスプロパティ ── 型のインスタンスに紐付くプロパティ
    • スタティックプロパティ ── 型自身に紐付くプロパティ
  • ストアドプロパティ ── 値を保持するプロパティ
    • プロパティオブザーバ ── ストアドプロパティの変更の監視
    • レイジーストアドプロパティ ── アクセス時まで初期化を遅延させるプロパティ
  • コンピューテッドプロパティ ── 値を保持せずに算出するプロパティ
    • ゲッタ ── 値の返却
    • セッタ ── 値の更新
    • セッタの省略

5.4
イニシャライザ ── インスタンスの初期化処理

  • 定義方法
  • 失敗可能イニシャライザ ── 初期化の失敗を考慮したイニシャライザ
  • コンパイラによる初期化チェック

5.5
メソッド ── 型に紐付いた関数

  • 定義方法
  • 紐付く対象による分類
    • インスタンスメソッド ── 型のインスタンスに紐付くメソッド
    • スタティックメソッド ── 型自身に紐付くメソッド
  • オーバーロード ── 型が異なる同名のメソッドの定義
    • 引数によるオーバーロード
    • 戻り値によるオーバーロード

5.6
サブスクリプト ── コレクションの要素へのアクセス

  • 定義方法
  • セッタの省略
  • オーバーロード ── 型が異なるサブスクリプトの定義

5.7
エクステンション ── 型の拡張

  • 定義方法
  • メソッドの追加
  • コンピューテッドプロパティの追加
  • イニシャライザの追加

5.8
型のネスト

  • 定義方法

5.9
まとめ

第6章 型の種類 ── 構造体,クラス,列挙型

6.1
型の種類を使い分ける目的

6.2
値の受け渡し方法による分類

  • 値型 ── 値を表す型
    • 変数と定数への代入とコピー
    • mutatingキーワード ── 自身の値の変更を宣言するキーワード
  • 参照型 ── 値への参照を表す型
    • 値の変更の共有
  • 値型と参照型の使い分け

6.3
構造体 ── 値型のデータ構造

  • 定義方法
  • ストアドプロパティの変更による値の変更
    • 定数のストアドプロパティは変更できない
    • メソッド内のストアドプロパティの変更にはmutatingキーワードが必要
  • メンバーワイズイニシャライザ ── デフォルトで用意されるイニシャライザ

6.4
クラス ── 参照型のデータ構造

  • 定義方法
  • 継承 ── 型の構成要素の引き継ぎ
    • 定義方法
    • オーバーライド ── 型の構成要素の再定義
    • finalキーワード ── 継承とオーバーライドの禁止
  • クラスに紐付く要素
    • クラスプロパティ ── クラス自身に紐付くプロパティ
    • クラスメソッド ── クラス自身に紐付くメソッド
    • スタティックプロパティ,スタティックメソッドとの使い分け
  • イニシャライザの種類と初期化のプロセス
    • 指定イニシャライザ ── 主となるイニシャライザ
    • コンビニエンスイニシャライザ ── 指定イニシャライザをラップするイニシャライザ
    • 2段階初期化
    • デフォルトイニシャライザ ── プロパティの初期化が不要な場合に定義されるイニシャライザ
  • クラスのメモリ管理
    • デイニシャライザ ── インスタンスの終了処理
  • 値の比較と参照の比較

6.5
列挙型 ── 複数の識別子をまとめる型

  • 定義方法
  • ローバリュー ── 実体の定義
    • ローバリューのデフォルト値
  • 連想値 ── 付加情報の付与

6.6
まとめ

第7章 プロトコル ── 型のインタフェースの定義

7.1
型のインタフェースを定義する目的

7.2
プロトコルの基本

  • 定義方法
  • 準拠方法
    • クラス継承時の準拠方法
    • エクステンションによる準拠方法
    • コンパイラによる準拠チェック
  • 利用方法
    • プロトコルコンポジション ── 複数のプロトコルの組み合わせ

7.3
プロトコルを構成する要素

  • プロパティ
    • 定義方法
    • ゲッタの実装
    • セッタの実装
  • メソッド
    • 定義方法
    • メソッドの実装
    • mutatingキーワード ── 値型のインスタンスの変更を宣言するキーワード
  • 連想型 ── プロトコルの準拠時に指定可能な型
    • 定義方法
    • 型制約の追加
    • デフォルトの型の指定
  • プロトコルの継承
  • クラス専用プロトコル

7.4
プロトコルエクステンション ── プロトコルの実装の定義

  • 定義方法
  • デフォルト実装による実装の任意化
  • 型制約の追加

7.5
標準ライブラリのプロトコル

  • 比較のためのプロトコル
    • Equatableプロトコル ── 同値性を確認するためのプロトコル
    • Comparableプロトコル ── 大小関係を比較するためのプロトコル
  • コレクションの操作のためのプロトコル
    • IteratorProtocolプロトコル ── 繰り返しのためのプロトコル
    • Sequenceプロトコル ── 要素の列挙のためのプロトコル
    • Collectionプロトコル ── サブスクリプトによる要素へのアクセスのためのプロトコル
  • エンコードとデコードのためのプロトコル
    • Encodable,Decodable,Codableプロトコル ── 型をエンコード,デコードに対応させるプロトコル
    • コンパイラによるコードの自動生成
  • リテラルから型をインスタンス化するためのプロトコル

7.6
まとめ

第8章 ジェネリクス ── 汎用的な関数と型

8.1
汎用的なプログラム

8.2
ジェネリクスの基本

  • 定義方法
  • 特殊化方法
  • 仮型引数と実型引数
  • 汎用性と型安全性の両立
  • Any型との比較

8.3
ジェネリック関数 ── 汎用的な関数

  • 定義方法
  • 特殊化方法
    • 引数からの型推論による特殊化
    • 戻り値からの型推論による特殊化

8.4
ジェネリック型 ── 汎用的な型

  • 定義方法
  • 特殊化方法
    • 型引数の指定による特殊化
    • 型推論による特殊化

8.5
型制約 ── 型引数に対する制約

  • 定義方法
    • スーパークラスや準拠するプロトコルに対する制約
    • 連想型のスーパークラスや準拠するプロトコルに対する制約
    • 型どうしの一致を要求する制約

8.6
まとめ

第9章 モジュール ── 配布可能なプログラムの単位

9.1
再利用可能かつ配布可能なプログラム

9.2
モジュールの作成方法

  • フレームワーク ── モジュールやリソースを含むパッケージ
  • アプリケーション ── モジュールやリソースを含む実行可能なパッケージ

9.3
名前空間 ── 名前が一意となる範囲

  • import文 ── モジュールのインポートを行う文
  • 名前の衝突の回避
    • 不要になった3文字接頭辞

9.4
アクセスコントロール ── 外部からの使用の制限

  • アクセスレベル ── 公開範囲の分類
    • 指定方法
    • デフォルトのアクセスレベル
    • エクステンションのアクセスレベル
  • モジュールヘッダ ── モジュール外から参照可能なインタフェース
    • 閲覧方法
    • モジュールヘッダに記述される情報
    • ドキュメントコメント ── コードの意図や使用方法の説明

9.5
まとめ

第10章 型の設計指針

10.1
クラスに対する構造体の優位性

  • 参照型のクラスがもたらすバグ
  • 値型の構造体がもたらす安全性
  • コピーオンライト ── 構造体の不要なコピーを発生させない最適化
  • クラスを利用するべきとき
    • 参照を共有する
    • インスタンスのライフサイクルに合わせて処理を実行する

10.2
クラスの継承に対するプロトコルの優位性

  • クラスの継承がもたらす期待しない挙動
  • プロトコルによるクラスの継承の問題点の克服
  • クラスの継承を利用するべきとき
    • 複数の型の間でストアドプロパティの実装を共有する

10.3
オプショナル型の利用指針

  • Optional<Wrapped>型を利用するべきとき
    • 値の不在が想定される
    • ただし,必然性のないOptional<Wrapped>型のプロパティは排除する
  • 暗黙的にアンラップされたOptional<Wrapped>型を利用するべきとき
    • 初期化時にのみ値が決まっていない
    • サブクラスの初期化より前にスーパークラスを初期化する
  • Optional<Wrapped>型と暗黙的にアンラップされたOptional<Wrapped>型を比較検討するべきとき

10.4
まとめ

第11章 イベント通知

11.1
Swiftにおけるイベント通知のパターン

11.2
デリゲートパターン ── 別オブジェクトへの処理の委譲

  • 実装方法
    • 命名規則
    • 弱参照による循環参照への対処
  • 利用するべきとき
    • 2つのオブジェクト間で多くの種類のイベント通知を行う
    • 外部からのカスタマイズを前提としたオブジェクトを設計する

11.3
クロージャ ── 別オブジェクトへのコールバック時の処理の登録

  • 実装方法
    • キャプチャリスト ── キャプチャ時の参照方法の制御
    • weakキーワード ── メモリ解放を想定した弱参照
    • unownedキーワード ── メモリ解放を想定しない弱参照
    • キャプチャリストの使い分け
    • escaping属性によるselfキーワードの必須化
    • typealiasキーワードによる複雑なクロージャの型への型エイリアス
  • 利用するべきとき
    • 処理の実行とコールバックを同じ箇所に記述する

11.4
オブザーバパターン ── 状態変化の別オブジェクトへの通知

  • 実装方法
    • Selector型 ── メソッドを参照するための型
  • 利用するべきとき
    • 1対多のイベント通知を行う

11.5
まとめ

第12章 非同期処理

12.1
Swiftにおける非同期処理

12.2
GCD ── 非同期処理のための低レベルAPI群

  • 実装方法
    • ディスパッチキューの種類
    • 既存のディスパッチキューの取得
    • 新規のディスパッチキューの生成
    • ディスパッチキューへのタスクの追加
  • 利用するべきとき
    • シンプルな非同期処理を実装する

12.3
Operation,OperationQueueクラス ── 非同期処理を抽象化したクラス

  • 実装方法
    • タスクの定義
    • キューの生成
    • キューへのタスクの追加
    • タスクのキャンセル
    • タスクの依存関係の設定
  • 利用するべきとき
    • 複雑な非同期処理を実装する

12.4
Threadクラス ── 手動でのスレッド管理

  • 実装方法
  • 利用するべきとき
    • 特になし

12.5
非同期処理の結果のイベント通知

12.6
まとめ

第13章 エラー処理

13.1
Swiftにおけるエラー処理

13.2
Optional<Wrapped>型によるエラー処理 ── 値の有無による成功,失敗の表現

  • 実装方法
  • 利用するべきとき
    • 値の有無だけで結果を十分に表せる

13.3
Result<T, Error>型によるエラー処理 ── 列挙型による成功,失敗の表現

  • 実装方法
  • 利用するべきとき
    • エラーの詳細を提供する
    • 成功か失敗のいずれかであることを保証する
    • 非同期処理のエラーを扱う

13.4
do-catch文によるエラー処理 ── Swift標準のエラー処理

  • 実装方法
    • Errorプロトコル ── エラー情報を表現するプロトコル
    • throwsキーワード ── エラーを発生させる可能性のある処理の定義
    • rethrowsキーワード ── 引数のクロージャが発生させるエラーの呼び出し元への伝播
    • tryキーワード ── エラーを発生させる可能性のある処理の実行
    • try!キーワード ── エラーを無視した処理の実行
    • try?キーワード ── エラーをOptional<Wrapped>型で表す処理の実行
    • defer文によるエラーの有無に関わらない処理の実行
  • 利用するべきとき
    • エラーの詳細を提供する
    • 成功か失敗のいずれかであることを保証する
    • 連続した処理のエラーをまとめて扱う
    • エラー処理を強制する

13.5
fatalError(_:)関数によるプログラムの終了 ── 実行が想定されていない箇所の宣言

  • 実装方法
    • Never型 ── 値を返さないことを示す型
  • 利用するべきとき
    • 想定外の状況ではプログラムを終了させる

13.6
アサーションによるデバッグ時のプログラムの終了 ── 満たすべき条件の宣言

  • 実装方法
    • assert(_:_:)関数 ── 条件を満たさない場合に終了するアサーション
    • assertionFailure(_:)関数 ── 必ず終了するアサーション
    • コンパイルの最適化レベル ── デバッグとリリースの切り替え
  • 利用するべきとき
    • デバッグ時に想定外の状況を検出する
    • リリース時は想定外の状況でもプログラムの実行を継続する

13.7
エラー処理の使い分け

13.8
まとめ

第14章 実践的なSwiftアプリケーション ── Web APIクライアントを作ろう

14.1
GitHub Search APIクライアントを作ろう

14.2
実装の下準備

  • API仕様と動作の確認
  • Xcodeプロジェクトの作成
  • 実装方針の確認

14.3
API仕様のモデル化

  • レスポンス ── サーバ上のリソースの表現
    • 構造体の定義
    • JSONから構造体へのマッピング
    • ジェネリック型による検索結果の表現
  • エラー ── APIクライアントで発生するエラーの表現
    • エラーの分類
    • エラーを表すレスポンスのモデル化
  • リクエスト ── サーバに対する要求の表現
    • ベースURLとパスの定義
    • HTTPメソッドの定義
    • パラメータの定義
    • リクエストとレスポンスの紐付け
    • リポジトリ検索APIの実装

14.4
APIクライアント ── Web API呼び出しの抽象化

  • FoundationのHTTPクライアント
    • URLRequest型 ── リクエスト情報の表現
    • HTTPURLResponse型 ── HTTPレスポンスのメタデータ
    • URLSessionクラス ── HTTP経由でのデータの取得
  • API仕様をモデル化した型とFoundationの型の変換
    • リクエストを表す型のURLRequest型へのマッピング
    • Data型とHTTPURLResponse型のレスポンスを表す型へのマッピング
  • APIクライアントの構成要素間の接続
    • HTTPクライアントの実装
    • APIクライアントのインタフェースの定義
    • HTTPリクエストの送信
    • HTTPレスポンスの処理

14.5
プログラムの実行

  • エントリポイントの準備
  • 実行ファイルの作成と実行

14.6
まとめ

第15章 SwiftからObjective-Cを利用する

15.1
SwiftからObjective-Cを利用する目的

15.2
SwiftからObjective-Cを利用するケース

  • Objective-Cで実装されたライブラリを使用する
  • Objective-Cで実装されたプログラムにSwiftのコードを追加する

15.3
SwiftからObjective-Cを利用する方法

  • ブリッジングヘッダの作成
  • モジュールのインポート

15.4
SwiftからObjective-Cランタイムを利用する方法

  • objc属性 ── 特定の要素をObjective-Cから参照可能にする属性
  • objcMember属性 ── クラスの要素すべてをObjective-Cから参照可能にする属性
  • nonobjc属性 ── 特定の要素をObjective-Cから参照不可能にする属性
  • dynamicキーワード ── 動的ディスパッチを必須にするキーワード

15.5
Swiftから利用しやすく安全なObjective-Cのコード

  • ライトウェイトジェネリクス ── コレクションの要素の型の指定
    • Swift側でのメリット
  • __kindofキーワード ── 特定の型のサブクラスの表現
  • null許容性アノテーション ── Null値を取り得るかの指定
    • Objective-CとSwiftでのnilの違い
    • null許容性アノテーションの属性
    • 関数への適用
    • 特定の範囲への適用
  • id型はできるだけ利用しない
    • instancetypeキーワードの利用
    • ライトウェイトジェネリクスの利用
    • プロトコルに準拠したid型の利用
  • Objective-Cはあくまで動的な言語であることに注意する

15.6
両言語でのイニシャライザの対応関係

  • イニシャライザ
  • クラスファクトリメソッドとイニシャライザ

15.7
両言語での型の対応関係

  • 数値
  • 構造体
  • 文字列
  • コレクション
    • 配列
    • 集合
    • 辞書
  • ブロックとクロージャ

15.8
Objective-CからSwiftを利用する方法

15.9
まとめ

  • あとがき
  • 索引
  • 著者プロフィール

著者プロフィール

石川洋資(いしかわようすけ)

大学在学中からiOSアプリ開発に取り組み、現在はスタートアップで開発全般を担当するエンジニア。APIKitやDIKitなどのSwift製ライブラリの開発に参加している。
GitHub:ishkawa


西山勇世(にしやまゆうせい)

大学では文学を専攻するも、論理学を経て計算機科学に関心を持つようになり、プログラマを志す。イギリスにてクックパッド株式会社の海外展開に従事。文理の垣根を超えた、芸術・哲学・科学の関連性に関心がある。
GitHub:yuseinishiyama