一般的な用途では、整数の定数および変数は、負の値にならないことがわかっている場合も含めて、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
となります。
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.