結論
コンパイルエラーで怒られます
enum Number: Int {
case max = 9223372036854775807
case next // Integer literal '9223372036854775808' overflows when stored into 'Int'
}
解説
enumのraw valueについて
Swiftのenum(列挙型)はcaseに対応した値を持たせることができます。
この値のことをraw valueといいます。
raw valueを設定するには列挙型の定義で列挙型名の後に続けて:raw valueの型
のように書き、それぞれのケースに=
で指定します。
enum Number: Int {
case one = 1
case two = 2
case ten = 10
}
Int型のraw valueのデフォルト値は0で、=
で指定しなかった場合は直前のケース+1の値になるという特性があります。
enum Number: Int {
case zero
case one
case ten = 10
case aaa
}
print(Number.zero.rawValue) // 0
print(Number.one.rawValue) // 1
print(Number.ten.rawValue) // 10
print(Number.aaa.rawValue) // 11
オーバーフローについて
オーバーフローとは、限界を超えてしまった状態です(ざっくり)
SwiftのInt型は符号付き整数を表すので、64ビット環境で
-9223372036854775808から9223372036854775807までの数値を表現できます。
この値はInt.min
およびInt.max
で取得できます。
minを下回る、もしくはmaxを上回る計算などするとエラーとなります。
print(Int.min) // -9223372036854775808
print(Int.max) // 9223372036854775807
// これはオーバーフローによるエラー
Int.max + 1
ということで
enumの自動採番でIntの限界を超えるとどうなるのか気なってしまった結果、この記事ができあがりました。
結果は冒頭の通り、普通にコンパイルエラーです
922京3372兆368億5477万5807を超えるケースを列挙する際には注意しましょう