# 定数と変数

Swiftで値を保持するための変数には2種類あります。定数と変数です。

# 定数

定数を宣言するときは、let を使用します。

宣言時に型を明示的に指定することができ、この型の部分を 型アノテーション (type annotation)といいます。

let a: Int = 123

定数は一度宣言して代入したあとは、2度目の再代入はできません。再代入をしようとすると、コンパイラはエラーを出力します。

let a: Int = 123

a = 456

/* 実行結果 */
// main.swift:3:1: error: cannot assign to value: 'a' is a 'let' constant
// a = 456
// ^
// compiler exit status 1

Swiftでは、このようにコンパイラが自動で不正を検知し、値が意図せずに変更されるのを防ぐことができます。

# 変数

変数を宣言するときは、var を使用します。

定数同様、宣言時に型を明示的に指定することができます。

var a: Int = 123

変数は定数と異なり、一度宣言したあとでも再代入ができます。

var a: Int = 123

a = 456

また、複数の変数名をカンマで区切って記述することもできます。

var a: Int = 123, b: String = "abc", c: Int = 456

変数定義は初期値の設定をしなくても記述できますが、特に理由がなければ初期値を設定することが推奨されています。

# 型推論

定数や変数を宣言するときに型を明示的に指定することができます。

しかし、Swiftは型推論の機能を提供しているため、明示的に型を指定しなくても代入した値から型を推論してくれます。

次の例では、Int型の型アノテーションを省略していますが、Swiftは代入された値によってInt型として解釈します。

var a = 123

通常の開発では型推論を利用し、型アノテーションがなければ型の決定ができない場合のみ明示的に指定するのがいいでしょう。

# 型の確認

一度代入した定数や変数の型を確認するためには、type(of:) 関数を使用します。

var a = 123

print(type(of: a)) // Int

Xcodeでは、Quick Help Inspectorという機能があり、type(of:)関数を使用しなくても型を確認することができます。

ViewInspectorsShow Quick Help Inspector を選択してください。

Image

変数にカーソルを合わせると、変数の型情報をみることができます。

この場合、var str = "Hello, playgroung" はString型になるので var str: String と表示されます。

Image

# 型の変換

Swiftは静的な型付け言語なので、基本的には変数や定数に初期値以外の型の値を再代入できません。Int型にDouble型を代入しようとしてもコンパイラはエラーを出力します。

var a = 123

a = 0.5

/* 実行結果 */
// main.swift:3:5: error: cannot assign value of type 'Double' to type 'Int'
// a = 0.5
//     ^~~
//     Int( )
// compiler exit status 1

また、式の計算においても型が一致していない場合はコンパイラはエラーを出力します。

次の例では、Int型とDouble型の型が一致していないため計算をすることができません。

var a = 10
var b = 0.5
var c = a - b

/* 実行結果 */
// main.swift:3:11: error: binary operator '-' cannot be applied to operands of type 'Int' and 'Double'
// var c = a - b
//         ~ ^ ~

Swiftは 暗黙の型変換 を行いません。そのため、もし計算をさせたい場合は開発者が明示的に型を変換させなければなりません。

次の例で、Int型である変数 a をDouble型に変換させてみましょう。

var a = 10
var b = 0.5
var c = Double(a) - b

print(c) // 9.5

コンパイラは同じ型と解釈したので、計算を実行することができました。