本書は,Swiftの言語仕様と実践的な利用方法を解説した入門書です。ほかの言語の経験はあるがSwiftの経験はない方や,Swiftの知識をより深めたい方を対象としています。
Swiftは,iOS,macOS向けアプリケーションの開発言語として2014年に登場しました。現在では,以前の開発言語であるObjective-Cからの移行は着実に進んでおり,これからiOS,macOS向けアプリケーションを開発するのであれば,開発言語にはSwiftを選択するべきです。また,2015年12月のオープンソース化と同時にLinuxのサポートを開始し,今後はより広い範囲での利用が予想されます。
Swiftの最大の特徴は安全性です。バグを招きやすいあいまいな記述は許されず,多くのプログラムの誤りは実行前に検出されます。安全性に次ぐ特徴は,高い表現力です。モダンな言語が持つ先進的な機能を取り入れながらも,それらを直感的に利用できるようにデザインされています。
Swiftは簡潔な言語ですが,その言語仕様を理解し,正しく使うことはけっして容易ではありません。Appleの公式ドキュメントをはじめとして,どんな(what)言語仕様があり,それらをどのように(how)使うかに関しては豊富な情報源があります。しかし,それらがなぜ(why)存在し,いつ(when)使うべきかについてまとまった情報があるとは言えません。本書は,読者のみなさんの「なぜ」や「いつ」を解消することにも主眼を置いています。
本書では,はじめにSwiftの標準的な機能を一通り解説し,続いて型の設計指針や非同期処理,エラー処理などの実装パターンを説明します。最後に,実践的なSwiftアプリケーションの開発を通じて,それまでに説明した機能と実装パターンの具体的な活用方法を示します。
本書が対象とするバージョンはSwift 5です。また,説明に使用する開発環境はXcode 11です。執筆時点での両者の最新バージョンはSwift 5.1.3とXcode 11.3です。
2020年3月 石川 洋資
西山 勇世
謝辞
本書の執筆にあたり,多くの方に助けていただきました。
レビューに参加していただいた岸川克己さん,池田翔さん,三木康暉さんには,本書全体に渡って技術的ミスや不明瞭な箇所をご指摘いただきました。レビュアーのみなさんのおかげで,混乱しやすい箇所を最小限にとどめることができたと思います。本当にありがとうございました。
また,編集者の稲尾尚徳さんには,執筆の機会をくださったこと,思うように筆が進まない著者2人を根気強くリードしてくださったことに感謝しています。稲尾さんがいなければ,本書を書き上げることはできなかったと思います。
すばらしい言語を開発したSwiftの開発チーム,言語の特性を活かすプラクティスを磨き上げてきたSwiftの開発者コミュニティ,執筆を支えてくれた妻の遥に感謝します。本書を通じて,少しでもSwiftの発展に貢献できれば幸いです。
石川 洋資
これまで関わることのできた,すべての開発者の方々に感謝します。日々のディスカッションから多くの着想を得ることができました。
また,妻の真理子のサポートがなければ,本書を完遂することはできませんでした。いつも,本当にありがとう。娘の友理佳・知世にも感謝します。その成長を楽しみにする気持ちが,執筆の糧になりました。
西山 勇世
増補改訂第3版での更新点
本書の初版は2016年にリリースされたSwift 3に,改訂新版は2017年にリリースされたSwift 4に対応していましたが,増補改訂第3版では2019年にリリースされたSwift 5に対応しました。Swift 4とSwift 5の間にそれほど大きな変化はありませんが,プログラミングの小さな問題を解決する改善が数多く取り込まれています。増補改訂第3版では,これらの改善を説明に反映しています。
また,言語のアップデートとは関係ありませんが,実践入門という趣旨に合わせて,第16章「Webサービスとの連携」と第17章「ユニットテスト」を新設しました。第16章「Webサービスとの連携」の内容は,これまでの版では第18章「実践的なSwiftアプリケーション ── Web APIクライアントを作ろう」の中で説明していましたが,汎用的に使えるものであるため,独立した章に格上げしました。第17章「ユニットテスト」では,ユニットテストの書き方や実行方法などの基礎を説明しています。ユニットテストの実践的な例を示すため,第18章「実践的なSwiftアプリケーション ── Web APIクライアントを作ろう」のサンプルコードにもユニットテストを追加しています。ユニットテストの手法は,より良いプログラムを書くうえで必ず役に立つので,ぜひ身に付けてください。
さらに今回の改訂では,章構成の見なおしも行いました。標準ライブラリの型やプロトコルの説明を序盤の章に寄せて再構築し,Swiftにおける実装パターンに早い段階で触れられるようにしました。また,map(_:)
メソッドやfilter(_:)
メソッドなどの,関数型のプログラミングパターンについても説明を追加しました。