Swift
Swiftとは
Swift は Apple が開発した静的型付けのコンパイル型言語で、iOS・macOS・watchOS 向けアプリの標準的な開発言語です。それまで使われていた Objective-C を置き換える形で2014年に登場しました。
let message = "Hello, Swift"
print(message)
Objective-C の資産を呼べるよう互換性が保たれており、既存アプリへ Swift のファイルを足していく形での移行ができます。
オプショナル型
Swift で最初につまずきやすく、そして最も重要なのがオプショナル型です。値が無いかもしれないことを型で表し、そのままでは中身を使えません。
var name: String? = findName() // nil になりうる
print(name?.count ?? 0) // nil なら 0
String と String? は別の型として扱われるため、値の不在を考慮し忘れたコードはコンパイルを通りません。[[Kotlin]] の null 安全とほぼ同じ発想で、実行時のクラッシュを型検査へ前倒しする仕組みです。
強制的に中身を取り出す ! も書けますが、nil のときは実行時に停止します。使いどころを限定するのが定石です。
SwiftUIと宣言的UI
現在の Apple プラットフォーム向け UI は SwiftUI で書くのが主流です。画面の状態から見た目を宣言し、状態が変われば [[フレームワーク]] 側が差分を描き直します。
struct CounterView: View {
@State private var count = 0
var body: some View {
Button("tapped \(count)") { count += 1 }
}
}
「状態を変えれば画面が追従する」という考え方は、Web の宣言的UIと同じです。個々の部品を手続き的に書き換える旧来の方式に比べ、状態と表示のずれが起きにくくなります。
非同期処理は async / await と、並行実行を型で守る仕組み(アクター)を組み合わせて書きます。[[並行処理と非同期]] を言語機能として扱う点は近年の言語に共通する流れです。
クロスプラットフォーム構成での役割
[[Dart]] と Flutter でアプリを作る場合、iOS 固有の機能(生体認証・通知・課金など)へ触る層は Swift で書きます。Android 側の [[Kotlin]] と対になる位置づけです。
- 共通の画面とロジック — Dart
- Android 固有処理 — Kotlin
- iOS 固有処理 — Swift
どの言語も担当範囲が決まっているため、「まず共通層、必要になったらネイティブ層」という順で覚えると迷いません。
初学者向けポイント
- 開発環境は Xcode で、シミュレータ・デバッガ・UIプレビューが揃っています(macOS が必要)
- 定数は
let、変数はvar。まずletで書き、必要なときだけvarにすると事故が減ります - オプショナルは避けるものではなく、値が無い状態を明示するための道具です。
if letやguard letで安全に取り出す書き方に慣れましょう
関連技術とのつながり
- [[Kotlin]] — null 安全・宣言的UIなど、対になる立場で設計思想が近い
- [[Dart]] — Flutter アプリでは共通層を Dart、iOS 固有層を Swift が担う
- [[フレームワーク]] — SwiftUI は状態から画面を組み立てる宣言的なフレームワーク
- [[並行処理と非同期]] —
async/awaitとアクターで安全に並行処理を書く
Q: Swiftのオプショナル型(`String?`)が表すものはどれ?
- [x] 値が無い(nil)可能性がある文字列型
- [ ] 文字列を必ず持つ型
- [ ] 文字列を暗号化する型
解説: オプショナルは値の不在を型で表します。`String` とは別の型なので、考慮し忘れたコードはコンパイルを通りません。
Q: SwiftUIの考え方として正しいものはどれ?
- [ ] 画面の部品を1つずつ手続き的に書き換える
- [x] 状態を宣言し、状態が変わると画面が自動で追従する
- [ ] HTMLとCSSで画面を記述する
解説: SwiftUI は宣言的UIで、状態から見た目を組み立てます。状態が変わるとフレームワークが差分を描き直します。
Q: Flutterアプリで iOS 固有の機能に触れるときに使う言語はどれ?
- [ ] Kotlin
- [x] Swift
- [ ] Dart
解説: 共通層は Dart、Android 固有処理は Kotlin、iOS 固有処理は Swift という分担になります。