一般的な用途では、整数の定数および変数は、負の値にならないことがわかっている場合も含めて、Int 型にします。日常的にデフォルトの整数型を利用することで、整数の定数および変数に互換性をもたらし、推論される整数型に適合します。

他の整数型は、外部ソースで明示的にサイズ指定されているデータや、性能、メモリ使用、他の不可欠な最適化など、特定の課題に必要となる場合にのみ使用します。こうした状況で明示的にサイズ指定された型を使用することで、値のオーバーフローや、使用されるデータの性質を把握しやすくなります。

整数変換

整数の定数または変数が保存できる数値の範囲は、各数値型によって異なります。Int8 は -128 から 127 までの数値を保存できますが、UInt8 は 0 から 255 までの数値を保存できます。サイズ指定のある整数型の定数または変数に、範囲外の数値を代入すると、コードがコンパイルされる時にエラーとして報告されます。

let cannotBeNegative: UInt8 = -1
// UInt8 は負の値を保存できないため、エラーになる
let tooBig: Int8 = Int8.max + 1
// Int8 は Int8 の最大値よりも大きな数値を保存できないため、
// これもエラーになる

各数値型が保存できる値の範囲が異なるため、ケースに応じて数値型を変換する必要があります。このアプローチにより、気付かないうちに型変換がエラーになることを防ぎ、コードで明示的に型変換することになります。

ある数値型を別の数値型に変換するには、値に合う型で新たな値を初期化します。下の例では、定数 twoThousandは UInt16 型で、定数 one は UInt8 型です。これらは同じ型でないため、直接足し合わせることはできません。代わりに、この例では one の値で初期化した新たな UInt16 を生成するために UInt16(one) として、この値を利用しています。

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)

足し算の両側が UInt16 型となり、足し算できるようになります。定数 twoThousandAndOne は、2 つのUInt16 値の合計なので、UInt16 型と推論されます。

SomeType(ofInitialValue) は、Swift で型のイニシャライザを呼び出す方法で、初期値を渡します。UInt16 には UInt8 の値を受け取るイニシャライザがあり、UInt8の値から新たに UInt16 を生成するために、このイニシャライザが使用されています。どのような型でも渡せるということではなく、UInt16 がイニシャライザを提供している型でなければなりません。既存の型に、新たな型を受け取るイニシャライザを追加する拡張は、Extensions でカバーされています。

整数と浮動小数点数の変換

整数と浮動小数点数の間での型変換は、明示的に行う必要があります。

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi は 3.14159 と等しく、Double 型と推論される

ここで、定数 three の値は Double 型の値を新たに生成するために使われ、足し算の両側が同じ型となります。この変換をせずに加算することはできません。

浮動小数点数から整数への変換についても、明示的に行う必要があります。整数の型は、Double または Float の値で初期化できます。

let integerPi = Int(pi)
// integerPi は 3 と等しく、Int 型と推論される

浮動小数点数の値は、このように整数値に初期化した場合は、常に切り捨てられます。つまり、4.75 は 4 となり、-3.9 は -3 となります。

NOTE
数値型の定数や変数を結合する規則と、数値リテラルの規則は異なります。リテラル値の 3 とリテラル値の 0.14159 は、直接加算することができます。これは、数値リテラル自体に明示的な型があるわけではないためです。型は、コンパイラによって評価される時点でのみ推論されます。

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.