Swift チートシート
最終更新
Hello World と基本
Swift はトップレベルで定型コードが不要で、1 行で動きます。
| 操作 | 構文 |
|---|---|
| 1 行を出力 | print("Hello, World!") |
| 改行なしで出力 | print("Hi", terminator: "") |
| 文字列補間 | print("Hi \(name)") |
| コメント | // this is a comment |
| 複数行コメント | /* ... */ |
| モジュールをインポート | import Foundation |
| ファイルを実行 | swift run または swift main.swift |
変数 (let / var) と型
定数には let、変更可能な値には var を使います。型は通常推論されます。
| 操作 | 構文 |
|---|---|
| 定数 | let age = 30 |
| 変数 | var count = 0 |
| 明示的な型 | let name: String = "Ada" |
| 基本型 | Int, Double, String, Bool, Character |
| 型変換 | Double(i), String(n), Int("42") |
| タプル | let pair = (1, "a") |
| 型エイリアス | typealias ID = Int |
| 型を調べる | value is String, value as? String |
オプショナル
オプショナルは値が存在しない可能性を表します。使う前にアンラップします。
| 操作 | 構文 |
|---|---|
| オプショナルを宣言 | var name: String? = nil |
| オプショナルバインディング | if let n = name { ... } |
| guard でアンラップ | guard let n = name else { return } |
| nil 合体 | let n = name ?? "default" |
| オプショナルチェーン | user?.address?.city |
| 強制アンラップ (危険) | name! |
| 暗黙的アンラップ | var name: String! |
| オプショナルを map | name.map { $0.count } |
文字列
文字列は値型で、完全な Unicode をサポートします。
| 操作 | 構文 |
|---|---|
| 長さ | s.count |
| 大文字 / 小文字 | s.uppercased(), s.lowercased() |
| 連結 | "foo" + "bar" |
| 補間 | "Total: \(price)" |
| 含むかどうか | s.contains("ell") |
| 接頭辞 / 接尾辞を持つ | s.hasPrefix("he") |
| 分割 | s.split(separator: ",") |
| 置換 | s.replacingOccurrences(of: "a", with: "b") |
| 複数行文字列 | """ ... """ |
コレクション (Array、Dictionary、Set)
3 つの中核コレクション型で、いずれも値型です。
| 操作 | 構文 |
|---|---|
| 配列リテラル | var nums = [1, 2, 3] |
| 追加 | nums.append(4) |
| アクセス / 個数 | nums[0], nums.count |
| map / filter | nums.map { $0 * 2 }, nums.filter { $0 > 1 } |
| 辞書リテラル | var ages = ["Ada": 30] |
| 辞書へのアクセス | ages["Ada"] はオプショナルを返す |
| 集合リテラル | var ids: Set = [1, 2, 3] |
| 集合に挿入 | ids.insert(4) |
| 辞書を反復 | for (k, v) in ages { ... } |
制御フロー
条件にかっこは不要で、switch は網羅的でなければなりません。
| 操作 | 構文 |
|---|---|
| if / else | if x > 0 { ... } else { ... } |
| 三項演算子 | let r = x > 0 ? "pos" : "neg" |
| switch | switch n { case 1: ...; default: ... } |
| 範囲付きの switch | case 1...5: ... |
| for-in ループ | for i in 0..<10 { ... } |
| 配列の for-in | for item in items { ... } |
| while ループ | while x < 100 { ... } |
| repeat-while | repeat { ... } while x < 100 |
| break / continue | break, continue |
関数とクロージャ
関数はラベル付きの引数を持ち、クロージャは自己完結したコードブロックです。
| 操作 | 構文 |
|---|---|
| 関数を定義 | func add(a: Int, b: Int) -> Int { a + b } |
| 外部ラベル | func greet(to name: String) { ... } |
| デフォルト引数 | func greet(name: String = "World") { ... } |
| 可変長引数 | func sum(_ nums: Int...) -> Int { ... } |
| 複数の戻り値 (タプル) | func bounds() -> (min: Int, max: Int) { ... } |
| クロージャ式 | let f = { (x: Int) -> Int in x * x } |
| 末尾クロージャ | nums.map { $0 * 2 } |
| 省略引数 | { $0 + $1 } |
構造体とクラス
構造体は値型 (コピーされる) で、クラスは参照型 (共有される) です。
| 操作 | 構文 |
|---|---|
| 構造体を定義 | struct Point { var x: Int; var y: Int } |
| クラスを定義 | class Person { var name: String } |
| クラスのイニシャライザ | init(name: String) { self.name = name } |
| インスタンスを生成 | let p = Point(x: 1, y: 2) |
| mutating な構造体メソッド | mutating func move() { x += 1 } |
| クラスメソッド | func greet() { ... } |
| 継承 (クラスのみ) | class Student: Person { ... } |
| 算出プロパティ | var area: Int { width * height } |
| 静的メンバ | static let shared = Manager() |
列挙型
列挙型は関連する値をまとめ、付随データを持てます。
| 操作 | 構文 |
|---|---|
| 列挙型を定義 | enum Direction { case north, south } |
| ケースを使う | let d = Direction.north |
| 列挙型で switch | switch d { case .north: ... } |
| 生の値 | enum Status: Int { case ok = 200 } |
| 生の値にアクセス | Status.ok.rawValue |
| 生の値から初期化 | Status(rawValue: 200) |
| 付随値 | case result(Int, String) |
| 列挙型のメソッド | func label() -> String { ... } |
最もよく使う Swift の構文を 1 ページにまとめました。この Swift チートシートは、言語の中核のクイックリファレンスです。定数と変数、オプショナル、文字列、コレクション、制御フロー、関数とクロージャ、そして iOS や macOS アプリを作るための構造体、クラス、列挙型を収録しています。
ここに載っているものはすべて標準の Swift で、公式のツールチェーンでコンパイルできます。必要なものをコピーするか、Swift プレイグラウンドですべてのスニペットをその場で試してみてください。Xcode は不要です。
Swift チートシート よくある質問
この Swift チートシートは無料ですか?
はい。この Swift チートシートは完全に無料で、登録も不要です。ブックマークしておけば、オプショナルのパターンやクロージャの構文、コレクションのメソッドを調べたいときにいつでも戻ってこられます。
Swift でオプショナルをアンラップするには?
オプショナルは値か
nil を持つので、使う前にアンラップします。安全な方法は、オプショナルバインディング (if let n = name { ... })、関数の冒頭での guard let、nil 合体演算子 (name ?? "default")、オプショナルチェーン (user?.name) です。name! による強制アンラップも使えますが、値が nil だとクラッシュするので、確実なときだけ使いましょう。Swift の構造体とクラスの違いは何ですか?
struct は値型で、代入や受け渡しでコピーが作られるため、変更しても元には影響しません。class は参照型で、コピーは同じインスタンスを共有し、継承をサポートするのはクラスだけです。Apple の指針は、既定では構造体を優先し、共有された変更可能な状態や継承が必要なときにクラスを使う、というものです。Swift をオンラインで練習できますか?
はい。Swift プレイグラウンドを開けば、このチートシートのどのスニペットもブラウザ上で実行できます。Xcode のインストールは不要です。体系的に学びたいときは、Coddy の無料インタラクティブ Swift コースが、オプショナルとコレクションから構造体、クラス、列挙型まで段階的に導いてくれます。
このチートシートは初心者に向いていますか?
はい。最もよく使うトピック (変数、オプショナル、制御フロー) から高度なもの (クロージャ、構造体とクラス、列挙型) へと並べてあるので、初日から上のセクションを使い、残りには慣れながら進めます。