Swift 速習 — 簡潔なリファレンス
Swift 5.9 の構文、値型、プロトコルと最もよく使う標準ライブラリの速習ハンドブック。日常的な場面の約 80% をカバー。
Swift Swift 5.9
LLVM (swiftc / Swift toolchain) · マルチパラダイム(プロトコル指向 · OO · 関数型) · 静的 · 強い型付け
おすすめの学習パス
まず print と変数の束縛を覚える → 値型(struct/enum)とオプショナル Optional を身につける → 関数、クロージャ、コレクションを掘り下げる → プロトコル指向の設計と拡張を理解する → do-catch と throws でエラーを処理する → async/await と DispatchQueue で並行処理を書く → その後は必要に応じて URLSession、日付、ビルドとテストを学ぶ。FAQ の節は落とし穴を避けるために後から読み返すとよい。
1.Hello World とビルド環境
Swift プログラムの実行、SwiftPM プロジェクトとツールチェーンについて。
最小プログラム
トップレベルコードがプログラムのエントリポイントになる。print で出力する。import でモジュールを取り込む。
実行とビルド
swift はスクリプトを直接実行する。swiftc でコンパイルする。swift run でパッケージを実行する。
SwiftPM プロジェクト
swift package init で初期化する。Package.swift がマニフェスト。Sources がソースディレクトリ。
import による取り込み
import でモジュールを取り込む。Foundation はよく使われる。必要に応じてサブモジュールをインポートする。
出力と補間
print/print(items:)。文字列補間は \(値)。区切り文字と終端文字。
コマンドライン引数
CommandLine.arguments で引数を取得する。最初はプログラムのパス。
複数ファイル
同じパッケージ内の複数のソースファイルが型を共有する。internal アクセスレベル。
Xcode 統合
Xcode プロジェクトの構成。target と scheme。iOS 開発のワークフロー。
2.変数と定数
var/let バインディング、型推論、スコープ、命名について。
var と let
let の定数は不変。var の変数は可変。let の使用を優先する。
型推論
コンパイラがリテラルと文脈から型を推論する。複雑なケースでは明示的に注釈する。
明示的な型
コロンの後に型を注釈する。可読性が向上する。変換とリテラルの互換性。
定数
let で定数を宣言する。参照型の定数は不変の参照。コンパイル時定数。
シャドーイング
内側のスコープで同名の変数が外側を覆い隠す。if/switch の局所定数が一般的。
スコープ
{} がスコープを定義する。内側から外側にはアクセスできる。外側から内側にはアクセスできない。
命名規則
Swift の命名規約。camelCase、明確な動詞、略語の回避。
型変換
数値型は明示的に変換する。init() イニシャライザ。文字列と数値の相互変換。
3.型システム
基本型、タプル、構造体、列挙型、オプショナルについて。
基本型
Int、Double、Bool、String、Character。値型。
整数型
Int8〜Int64、UInt 系。プラットフォームネイティブの Int。オーバーフロー処理。
浮動小数点数
Float/Double の精度。CGFloat は UI 座標。演算と特殊な値。
タプル
複数の複合値。名前付き要素。分解。軽量なデータのグループ化。
構造体
struct は値型。自動メンバーイニシャライザ。プロパティとメソッド。
列挙型
enum で関連する値をグループ化する。関連値。生の値。網羅的マッチング。
オプショナル
Optional は空の可能性を表す。T? 構文。nil は値なしを表す。
ネスト型
型の内部に型を定義する。名前空間で整理する。列挙型は関連する型をまとめられる。
4.値型と参照型
値セマンティクス、クラスの参照、コピーオンライト、メモリレイアウト。
値型 vs 参照型
struct は値セマンティクスでコピーされる。class は参照を共有する。言語の中核的な違い。
class のセマンティクス
class は参照型。アイデンティティは一意。可変性とスレッド共有。
コピーオンライト
配列などの値型は内部でストレージを共有する。変更が加わったとき初めて実際にコピーされる。
同一性と等価性
=== は参照の同一性。== は値の等価性 (Equatable)。その違いが重要。
weak と unowned
weak は弱参照でカウントを増やさない。unowned は非所有参照。循環参照を断ち切る。
inout パラメータ
inout パラメータは参照渡し。関数内で元の値を変更できる。& を付けて呼び出す。
ポインタの相互運用
UnsafePointer と C の相互運用。メモリ管理は自己責任。危険な領域。
メモリレイアウト
型のメモリレイアウト。バイトアラインメント。性能と相互運用に影響する。
5.制御フロー
if、switch、guard、ループ、オプショナルバインディングについて。
if / else
if で条件付き実行。else if で複数分岐。条件に括弧は不要。
switch
switch は網羅的マッチング。範囲、タプル、バインディングに対応。break は不要。
guard
guard で早期退出する。else ブロックはスコープを退出する必要がある。else を持つ分岐として書く。
for-in ループ
for-in で範囲・配列・辞書を反復処理する。インデックス付きで反復する。
while ループ
while は条件ループ。repeat-while は実行後に判定する。
break と continue
break はループを抜ける。continue はこの周回をスキップする。ラベル付きでネストしたループを抜けられる。
if let
オプショナルバインディングでアンラップ。guard let で早期脱出。複数値を同時に展開。
パターンマッチング
switch/if でのパターン。case let、where。型マッチング。
6.関数
関数の定義、引数ラベル、戻り値、関数型とクロージャ。
関数定義
func で関数を定義。引数と戻り値。呼び出し構文。
引数ラベル
引数ラベルと内部名。_ でラベルを省略。可読性の設計。
デフォルト引数値
引数のデフォルト値。呼び出し時に省略可能。末尾、またはすべてにデフォルトが必要。
戻り値
戻り値の型。複数値はタプルで。単一式は暗黙的に return。
可変長引数
... で複数の引数を配列に集約。任意の個数。最後の引数。
inout パラメータ
inout で外部変数を変更。& で参照渡し。値型のインプレース変更。
関数型
関数は型として扱える。代入、引数、戻り値。第一級オブジェクト。
クロージャ
クロージャはコンテキストをキャプチャ。末尾クロージャ。引数名の省略。
7.文字列
String の操作、補間、部分文字列、Unicode とフォーマット。
String の基礎
String は値型。リテラルと可変性。Character で構成。
補間
\(式) で値を埋め込み。型安全。任意の式。
連結
文字列の連結。append。join。+= 演算子。
複数行文字列
三重引用符での複数行。インデントの切り詰め。補間値。 区切り。
よく使うメソッド
大文字小文字変換、検索、置換、分割、トリミング。よく使う String API。
部分文字列
Substring は元の文字列を参照。スライスは Substring を返す。String 変換で所有。
Unicode
文字は Unicode スカラーで構成。コードポイント。拡張書記素クラスタ。
フォーマット
String(format:) で C 風のフォーマット。数値のパディングと精度。
8.コレクション
Array、Dictionary、Set、高階関数と範囲。
Array
順序付きの値のコレクション。ジェネリック [T]。追加、削除、変更、検索。
配列の操作
スライス、置換、結合、検索。よく使う高階メソッド。
Dictionary
キーと値のペアのコレクション。[String: T]。順序なし。O(1) 検索。
Set
順序なしの一意な要素のコレクション。ハッシュセット。集合演算。
反復処理
配列/辞書/セットの反復処理。インデックス付き。逆順。条件付き反復。
高階関数
map、filter、reduce、compactMap、sorted。関数型のパイプライン処理。
ネストされたコレクション
コレクションの組み合わせ。多次元配列、辞書内の配列、構造体のコレクション。
Range
半開区間 ..<、閉区間 ...。配列のスライスとループ。
9.メモリ管理
ARC の参照カウント、弱参照、循環参照とメモリ最適化。
ARC
自動参照カウントでクラスインスタンスを管理。参照カウントが 0 になると解放。
weak/unowned
弱参照はカウントを増加させない。循環参照を防ぐ。解放済みアクセスの対処。
自動解放プール
autoreleasepool で解放を遅延。大規模ループのメモリ制御。
コピーセマンティクス
値型のコピーは安全。大きな型の最適化。共有と一意性。
循環参照
二つのクラスが互いに強参照して環を形成。メモリリーク。weak で断ち切る。
スタックとヒープ
値型はスタック、参照型はヒープ。割り当てとパフォーマンス。
lazy ストレージ
lazy で初期化を遅延。使用時に作成。重い属性の最適化。
メモリの最適化
ヒープ割り当ての削減、バッファの再利用、大きなコピーの回避。パフォーマンスチューニング。
10.クラスとプロトコル
class、継承、プロトコル、拡張とプロトコル指向プログラミング。
class の定義
クラスはプロパティとメソッドを定義。参照型。イニシャライザ。
継承
サブクラスはスーパークラスを継承。格納プロパティ、メソッド。最終クラスは final。
メソッドのオーバーライド
override でメソッド、プロパティ、イニシャライザを上書き。super で親クラスを呼び出し。
プロトコル
protocol で要件を定義。型が準拠。プロトコル指向設計の中核。
プロトコル拡張
extension がデフォルト実装を提供。制約付き拡張。プロトコルのデフォルトメソッド。
拡張
extension は既存の型にメソッドを追加する。カテゴリ別にコードを整理する。
プロパティオブザーバ
willSet/didSet でプロパティの変更を監視する。UI 更新やバリデーションに使う。
計算プロパティ
get/set で算出する。値は保持しない。派生データ向け。
11.エラー処理
throws、do-catch、try、defer とカスタムエラーについて。
Error プロトコル
Error プロトコルはエラー型を示す。列挙でエラーカテゴリを定義する。
throws
throws は送出可能な関数をマークする。throw でエラーを投げる。呼び出し側で処理が必要。
do-catch
do ブロック内で try を使う。catch でエラーを捕捉する。複数分岐に対応。
try の形式
try は catch が必要。try? はオプショナルに変換。try! は強制(クラッシュリスク)。
カスタムエラー
エラーにコンテキストを載せる。LocalizedError で説明を追加。エラーコード。
defer クリーンアップ
defer はスコープ終了時に実行される。リソース解放に使う。逆順で実行される。
致命的エラー
fatalError は回復不能なクラッシュ。precondition で条件をチェック。
Result 型
Result<Success, Failure> で成功/失敗を明示する。throws を避けられる。
12.入出力
コマンドライン入力、ファイル読み書き、FileManager と Codable について。
入力の読み込み
readLine でコマンドライン入力を読む。ループで対話的に処理。数値へのパース。
ファイルの読み込み
String(contentsOf:) でファイルを読み込む。Data はバイナリ用。行ごとに読み込み。
ファイルの書き込み
文字列と Data の書き込み。追記モード。アトミック書き込み。
FileManager
ファイルシステム操作。ディレクトリの作成、削除、移動、存在判定。
出力制御
print の形式。stderr。区切りと終端。文字列表現。
Data 操作
Data はバイトコンテナ。文字列と相互変換。base64 のエンコード/デコード。
JSONSerialization
JSON を辞書/配列に変換。逆方向のシリアライズ。JSONSerialization クラス。
Codable
Codable で自動シリアライズ。JSONEncoder/Decoder。プロトコル駆動。
13.よくある落とし穴
Swift 初心者が最も踏みやすい落とし穴と正しい書き方。
強制アンラップ
! でアンラップすると nil でクラッシュ。オプショナルバインディングと Nil-Coalescing 演算子を優先。
オプショナルチェイン
?. でチェインアクセス。途中で nil なら全体も nil。代入にも使える。
クロージャの循環参照
クロージャが self を強参照でキャプチャし循環する。キャプチャリスト [weak self] で回避。
配列の範囲外アクセス
インデックス範囲外でクラッシュ。first/last/prefix で安全アクセス。境界をチェック。
mutating
struct のメソッドでプロパティ変更には mutating が必要。値型は不変コピーされる。
文字列インデックス
文字列は整数インデックス不可。文字はマルチバイト。index メソッドを使う。
プロトコルと Self
プロトコル内で Self で制約。associatedtype。型消去。
暗黙的アンラップ
T! は暗黙的アンラップオプショナル。未初期化で使うとクラッシュ。注意して使う。
14.並行処理
GCD、async/await、Task、actor による並行モデル。
GCD の基本
DispatchQueue はシリアル/コンカレントキュー。グローバルとメインキュー。
Dispatch Group
DispatchGroup で複数タスクの完了を待つ。バッチ並行の集約に使う。
async/await
モダンな Swift の並行構文。async 関数とサスペンド。構造化並行処理。
async let
複数の非同期呼び出しを並行実行。独立した子タスクにバインド。並列に待つ。
Task
Task は並行ユニットを作成。コンテキストを継承。キャンセルと優先度。
actor
actor は状態を隔離する。データ競合を回避。非同期メソッドでアクセス。
メインスレッド
UI 操作はメインスレッド必須。スレッド間移動。メインスレッド確認。
スレッドセーフ
可変状態の並行アクセスを保護。ロック、キュー、アトミック操作。
15.ネットワーク
URLSession、HTTP リクエスト、非同期ネットワークと JSON の連携。
URLSession
URLSession でネットワークリクエストを発行。設定とデリゲート。セッションタイプ。
GET リクエスト
GET を発行。async/await でデータを取得。レスポンス状態を処理。
POST リクエスト
JSON body を送信。フォーム送信。Content-Type を設定。
非同期ネットワーク
async/await でのネットワーク呼び出し。同時並行リクエスト。タスクのキャンセル。
URL の組み立て
URLComponents で URL を安全に組み立てる。クエリパラメータのエンコード。パスの結合。
ファイルのダウンロード
ダウンロードタスクでファイルを保存する。進捗の監視。バックグラウンドダウンロード。
ネットワーク JSON
JSON をリクエストし Codable でデコードする。日付とその戦略の扱い。
ファイルのアップロード
multipart フォームでアップロードする。ファイルの body。境界文字列による区切り。
16.時刻と日付
Date、DateFormatter、カレンダー演算とタイマー。
Date
Date は時点を表す。タイムゾーンに依存しない絶対的な時刻。生成と比較。
日付のフォーマット
DateFormatter で日付を表示する。ローカライズされた書式。カスタム書式。
日付のパース
文字列を Date に変換する。固定書式のパース。ISO8601 のパース。
日付コンポーネント
DateComponents で年月日を取り出す。カレンダーコンポーネントの演算。
カレンダー演算
日付への日・月の加減算。翌週/翌月。Calendar による安全な演算。
時間間隔
コードの所要時間を計測する。TimeInterval は秒単位。パフォーマンス計測。
Timer
タイマーで繰り返し実行する。単発のタイマー。RunLoop に関する注意。
日付の比較
日付の前後を比較する。同じ日かどうかの判定。並べ替えと検証。
17.プロセスとシステム
コマンドライン引数、環境変数、プロセス操作とファイルパス。
コマンドライン引数
CommandLine で引数を取得する。引数とオプションの処理。
環境変数
環境変数を読み取る。設定と受け渡し。機微な情報に関する注意。
Process
Process で子プロセスを起動する。コマンドの実行。出力の取得。
パスの処理
URL のパス操作。結合、拡張子、ファイル名。サンドボックスのディレクトリ。
終了コード
プログラムの終了コード。exit と fatalError。0 が成功、0 以外が失敗。
シグナル処理
システムのシグナルを捕捉する。SIGINT など。安全な終了処理。
作業ディレクトリ
カレント作業ディレクトリの取得と変更。ファイルの相対パスの基準。
プロセスのファイル I/O
標準入力の読み取り。標準出力への書き込み。パイプによるやり取り。
18.正規表現
正規表現リテラル、NSRegularExpression とパターンマッチング。
正規表現の基礎
正規表現の文法の概念。文字クラス、量指定子、グループ。
正規表現リテラル
Swift 5.7 の正規表現リテラル /.../。型付きのマッチ。名前付きキャプチャ。
NSRegularExpression
NSRegularExpression は正規表現エンジン。範囲によるマッチ。古い OS との互換性。
マッチ
最初のマッチ、すべてのマッチ、マッチするかどうかの判定。範囲の取得。
キャプチャグループ
キャプチャグループの内容を取り出す。名前付きキャプチャ。正規表現のグループ参照。
置換
正規表現でテキストを置換する。テンプレートからキャプチャグループを参照。条件付きの置換。
分割
正規表現で文字列を分割する。区切り文字の保持と削除。複数の区切り文字。
よく使うパターン
メールアドレス、URL、数値、電話番号など、よく使う正規表現のテンプレート。
19.ビルドとツール
swiftc によるコンパイル、SwiftPM によるビルド、フォーマットと検査のツール。
swiftc コンパイル
コマンドラインで単一ファイルをコンパイルする。実行ファイルの生成。最適化オプション。
SwiftPM ビルド
swift build でプロジェクトをコンパイルする。インクリメンタルビルド。リリースモード。
テストの実行
swift test でテストスイートを実行する。XCTest とテストターゲット。
Package.swift
SwiftPM のパッケージマニフェスト。ターゲットと依存関係の宣言。プラットフォームの設定。
SwiftLint
コードスタイルの検査。ルールの設定。CI への統合。
swift-format
公式のコードフォーマッタ。書式ルールと設定。
xcodebuild
Xcode プロジェクトをコマンドラインでビルドする。エクスポートとアーカイブ。CI での利用。
リリースの流れ
バージョン管理、リリースビルド、配布。リリース前のチェックリスト。
このチートシートについて
このページは Swift 5.9 の自己完結型の速習ハンドブックで、言語のコアと最もよく使う標準ライブラリについて、実際のプロジェクトで現れる用法の約 80% をカバーする。内容は現代的な書き方に寄せている。値型(struct/enum)、プロトコル指向の設計、async/await による構造化並行処理、if let によるパターンマッチング、そして Codable によるシリアライズなどだ。信頼できる情報源としては Swift 公式の言語ガイドと API デザインガイドラインを参照するとよい。 19 の章がそれぞれ 1 つのテーマに集中している——最初のプログラムからオプショナル、プロトコル、並行処理、よくある落とし穴まで。各章は例付きの 8 つの小節(それぞれ 5〜20 行)に分かれ、全体で約 150 のトピックがある。コード片は意図的に短く、それ自体で意味が分かるようにしてある。 すべての処理はブラウザ内で完結する——アップロードもトラッキングもない。このページは GuruToolkit の無料開発者ツール集の一部であり、コード片はいかなる保証もなく自由に利用できる。
バージョン 2.1.0