| この記事の要点 |
|

Swift とは
Swift(スウィフト)は Apple が 2014 年の WWDC で発表したプログラミング言語です。iOS / iPadOS / macOS / watchOS / tvOS、さらに Linux でも動作し、現在の iPhone アプリ開発の標準言語として広く使われています。
従来 Apple 製 OS のアプリ開発に使われていた Objective-C / Objective-C++ / C 言語と共存できるように設計されており、既存資産を活かしながら徐々に Swift へ移行できます。
主な特徴
| 項目 | 内容 |
|---|---|
| パラダイム | マルチパラダイム(オブジェクト指向 / プロトコル指向 / 関数型 / 命令型) |
| コンパイラ | LLVM ベース。AOT コンパイルで高速 |
| 型システム | 静的型付け + 強力な型推論 |
| null 安全 | オプショナル型(String?)で「値がないかもしれない」を型で表現 |
| メモリ管理 | ARC(自動参照カウント) |
| 対話実行 | Xcode の Playgrounds、ターミナルの swift REPL でライブ実行 |
| 主要 UI | UIKit / AppKit に加え、宣言的 UI の SwiftUI |
| 主用途 | iOS / macOS / watchOS / tvOS アプリ、サーバサイド(Vapor 等) |
Hello, World
// 最短バージョン
print("Hello, World!")
拡張子は .swift。Playground にこの 1 行を貼り付ければそのまま動きます。
変数・定数
let name = "Taro" // 定数(再代入不可)
var age = 20 // 変数
age += 1
// 型を明示することも可能
let pi: Double = 3.14
原則 let(定数)を使い、必要なときだけ var(変数)にするのが Swift スタイルです。
オプショナル型 と guard / if let
Swift の特徴的な機能が オプショナル型です。値が「あるかもしれないし、無いかもしれない」を型で表現することで、null 安全を実現します。
let raw: String? = readLine() // String? は nil の可能性あり
// if let で安全に開封
if let s = raw {
print("入力: \(s)")
} else {
print("入力なし")
}
// guard で早期 return
func greet(_ name: String?) {
guard let n = name else {
print("名前がありません")
return
}
print("こんにちは \(n) さん")
}
構造体(値型)とクラス(参照型)
// 値型: コピーされる
struct Point {
var x: Int
var y: Int
}
// 参照型: 同じインスタンスを共有
class Counter {
var count = 0
func incr() { count += 1 }
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // コピー
p2.x = 99
print(p1.x, p2.x) // 1 99
let c1 = Counter()
let c2 = c1 // 同じ参照
c2.incr()
print(c1.count, c2.count) // 1 1
「迷ったらまず struct」が Swift の基本方針です。アイデンティティ(同一性)が必要な場合だけ class を選びます。
SwiftUI で UI を書く
SwiftUI は宣言的に UI を書ける現代の標準フレームワークです。
import SwiftUI
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack(spacing: 16) {
Text("カウント: \(count)")
.font(.title)
Button("+1") {
count += 1
}
}
.padding()
}
}
Objective-C との違い
| 観点 | Objective-C | Swift |
|---|---|---|
| 文法 | C 言語ベース + 角括弧メッセージ式 | モダン構文 / セミコロン省略可 |
| null 安全 | nil でメッセージ送信可だが落とし穴多い | オプショナル型で型レベルに保護 |
| ジェネリクス | 後付け(軽量ジェネリクス) | 言語に組み込み |
| パフォーマンス | 動的ディスパッチ中心 | 静的ディスパッチ可能で高速 |
| 主な UI | UIKit / AppKit | UIKit / AppKit / SwiftUI |
学習ロードマップ
- Xcode をインストールして Playground で文法を体験する
- 変数・制御構文・関数・オプショナル・構造体・クラスの基本を写経する
- UIKit のサンプル iPhone アプリ(カウンタ / TODO リスト等)を 1 本動かす
- SwiftUI に切り替えて宣言的 UI を学ぶ
- Combine / async-await で非同期処理、Core Data や SwiftData で永続化を学ぶ
- App Store へ実機リリースしてアプリ配布フロー全体を体験する
関連
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38