WEB+DB PRESS plusシリーズ[改訂新版]Swift実践入門
── 直感的な文法と安全性を兼ね備えた言語
── 直感的な文法と安全性を兼ね備えた言語
2018年1月17日紙版発売
2018年1月17日電子版発売
石川洋資,西山勇世 著
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
まとめ
- あとがき
- 索引
- 著者プロフィール
この本に関連する書籍
-
[改訂新版]Swiftポケットリファレンス
Swift 4の登場に合わせて内容を刷新したポケットリファレンスの改訂版です。Swiftは2014年に誕生したばかりの若いプログラミング言語ということもあり,アップデートの...
-
Androidを支える技術〈Ⅱ〉──真のマルチタスクに挑んだモバイルOSの心臓部
Androidのインターナル解説書。 根底に流れるモバイルプラットフォームとしての哲学を丁寧に扱い,最新版(7,N/Nougat)までカバー。 第2巻となる本書では,Androi...
-
Androidを支える技術〈Ⅰ〉──60fpsを達成するモダンなGUIシステム
Androidのインターナル解説書。 根底に流れるモバイルプラットフォームとしての哲学を丁寧に扱い, 最新版(7,N/Nougat)までカバー。 第1巻となる本書では,プラ...
-
GitHub実践入門──Pull Requestによる開発の変革
GitHubの実践的な使い方を,実際に手を動かす形で解説する書籍です。初学者の方にもわかりやすいよう,基本的なGitやGitHubの使い方から,「ソーシャルコーディング」の...