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 という分担になります。