タイトル: データ型
SEOタイトル: Swiftのデータ型|Int・String・Bool・Optionalの基本と型推論
Swiftのデータ型とは、値が「どんな種類の情報か(整数・小数・文字列・真偽値など)」をコンパイラに伝えるための分類であり、Swiftでは型を厳密に区別する静的型付けを採用しているため、変数や定数を扱う前に必ずいずれかの型が決まります。
| この記事の要点 |
|---|
|
主な基本データ型の一覧
まずSwiftでよく使う基本データ型を整理します。それぞれ用途と扱う値の種類が決まっており、目的に応じて使い分けます。
| 型 | 扱う値 | 用途・例 |
|---|---|---|
| Int | 整数 | 個数・回数・添字など。例: 42、-7 |
| Double | 浮動小数点数(64ビット) | 小数を含む計算の標準。例: 3.14 |
| Float | 浮動小数点数(32ビット) | 精度より省メモリを優先する場面。例: 1.5 |
| Bool | 真偽値 | 条件分岐。true / false |
| String | 文字列 | 文章・名前など。例: "Hello" |
| Character | 1文字 | 1文字単位の処理。例: "A" |
小数を扱うときは、特別な理由が無ければDoubleを使うのが一般的です。Swiftでは小数リテラルの型をとくに指定しない場合、Doubleとして推論されます。
型推論と型注釈
Swiftでは、代入する値からコンパイラが型を自動で判断します。これを型推論と呼びます。たとえば整数を代入すればInt、文字列を代入すればStringになります。
let count = 5 // Int と推論される |
一方で、型を明示したいときは型注釈を使い、変数名のうしろに: 型名を書きます。値の型をはっきりさせたい場合や、初期値を後から代入する場合に役立ちます。
let x: Int = 5 |
なお、値を変更しない場合はlet(定数)、変更する場合はvar(変数)を使います。型推論を使っても型注釈を使っても、いったん決まった型は途中で別の型に変わることはありません。
Optionalとnilの考え方
Swiftの大きな特徴がOptional(オプショナル)です。通常の型は必ず値を持ちますが、「値が存在しないかもしれない」状態を表したいときは、型名のうしろに?を付けたOptional型を使います。値が無い状態はnilで表します。
var score: Int? = 80 // 値あり |
Optionalの中身を取り出すことをアンラップと呼びます。代表的な方法がif letによる安全な取り出しです。値があるときだけ処理を実行できます。
var score: Int? = 80 |
このしくみにより、「値が無いのに使おうとして起きる不具合」をコンパイル時点で防ぎやすくなっています。Optionalは、Swiftが安全性を重視していることを示す代表的な機能です。
コレクション型とTuple
複数の値をまとめて扱うための型も用意されています。代表的なものを挙げます。
| 型 | 特徴 | 用途 |
|---|---|---|
| Array | 順序を持つ並び | 同じ型の値を順番に並べる |
| Dictionary | キーと値の対応 | 名前から値を引く |
| Set | 重複しない集まり | 一意な値の管理 |
| Tuple | 複数の値の組 | 異なる型をまとめて返す |
let numbers = [1, 2, 3] // Array<Int> |
ArrayやDictionaryは中に入れる値の型が決まっており、たとえば[Int]には文字列を混在させられません。これも型を厳密に区別するSwiftの考え方によるものです。
値型(struct)が中心であること
Swiftの基本型であるInt・Double・Bool・String・Array・Dictionaryなどは、いずれも値型(struct)として設計されています。値型は代入や関数への受け渡しのときに値がコピーされ、コピー元とコピー先は互いに影響しません。
var a = 10 |
この性質により、知らないうちに別の場所の値が書き換わるといった事態が起きにくく、動作を予測しやすくなります。
型変換
Swiftは型を自動で変換しないため、別の型へ変えたいときは明示的に型変換を行います。多くの型は、変換先の型名を関数のように呼び出して変換します。
let n = Int("5") // String → Int?(変換できないとnil) |
とくにInt("5")のような文字列から数値への変換は、文字列が数値として解釈できないこともあるため、結果はOptional(Int?)になります。変換に失敗した場合はnilが返るので、前述のアンラップで安全に扱います。
つまずきやすいポイント
Swiftの型まわりで誤解されやすい点を整理します。いずれもSwiftが安全性と明確さを優先していることに由来します。
| 注意点 | 内容 |
|---|---|
| 暗黙の型変換が無い | 他言語のように自動で型がそろうことはなく、型が違えばそのまま計算できない。明示的な変換が必要。 |
| Int と Double の混在演算 | let r = 1 + 2.0 のような直接の混在演算はエラー。どちらかをそろえる必要がある。 |
| Optionalのアンラップ忘れ | Int? をそのまま Int として使うことはできない。if let などで取り出してから使う。 |
let a = 10 |
よくある質問(FAQ)
Q. 小数を扱うときはDoubleとFloatのどちらを使えばよいですか。
A. 特別な事情が無ければDoubleが推奨されます。Doubleの方が精度が高く、Swiftでも小数リテラルは標準でDoubleとして推論されます。省メモリが重要な場面に限ってFloatを検討します。
Q. letとvarはどう使い分けますか。
A. 値を変更しないものはlet(定数)、変更するものはvar(変数)にします。基本はletを使い、変更が必要なときだけvarにすると、意図しない書き換えを防ぎやすくなります。
Q. なぜOptionalがわざわざ用意されているのですか。
A. 「値が無い状態」を型のレベルで明示し、値が無いまま使ってしまう不具合をコンパイル時に防ぐためです。通常の型にはnilを入れられず、値が無いことを許す場所だけがOptionalになるため、安全に扱えます。