Привет, ребята, я здесь новый, и сейчас я изучаю Swift, кодируя некоторые причудливые алгоритмы, которые приходят мне на ум, читая книгу «Яблоки Свифт».Ошибка Swift range с сообщением switch
Я пытался сжать (автоматически понизить) любое значение IntegerType. Вот небольшой отрывок из моего кода, который почти отлично работает за исключением одного случая:
switch signedValue
{
case Int64(Int8.min)...Int64(Int8.max): compressedValue = Int8(signedValue)
case (Int64(Int8.max) + 1)...Int64(UInt8.max): compressedValue = UInt8(signedValue)
case Int64(Int16.min)...Int64(Int16.max): compressedValue = Int16(signedValue)
case (Int64(Int16.max) + 1)...Int64(UInt16.max): compressedValue = UInt16(signedValue)
case Int64(Int32.min)...Int64(Int32.max): compressedValue = Int32(signedValue)
case (Int64(Int32.max) + 1)...Int64(UInt32.max): compressedValue = UInt32(signedValue)
case Int64(Int.min)...Int64(Int.max): compressedValue = Int(signedValue) // range bug #1 - workaround '..<'
default: compressedValue = signedValue
}
Пусть signedValue имеет тип Int64 и входное значение = 10_000_000_000. Это приведет к ошибке во время выполнения (в Playground):
Execution was interrupted, reason: EXC_BAD_INSTRUCTION ...
Может кто-нибудь помочь мне понять, что именно здесь происходит. Обходной путь для этой проблемы. Вместо «...» я мог бы использовать «.. <», но это не так, как должен быть диапазон.
Есть ли вероятность, что вы работаете на 32-битной платформе? –
Нет, я работаю над MacBook Air 11 "(середина?) 2013 года, который должен быть 64 бит. Int.max имеет то же значение, что и Int64.max. – DevAndArtist