Ошибка вывода типа с двойным инициализатором Swift для смещенных целочисленных параметров - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь инициализировать Float или Double с результатом целочисленной операции сдвига битов. Переданный параметр является целочисленным литералом, смещенным на беззнаковый байт. Насколько я понимаю вывод типа Swift, этот параметр должен иметь тип Int. Однако результирующее значение с плавающей запятой равно 0,0. Как ни странно, проблема исчезла, как только я поместил выражение параметра в скобки.

let someByte = UInt8(16)

print(Double(1 << someByte)) //Prints "0.0" ?!
print(Double((1 << someByte))) //Prints "65536.0"

1 Ответ

0 голосов
/ 25 января 2019

Это похоже на ошибку в компиляторе.Как сказал @Hamish, в последнем мастере исправлена ​​эта проблема, и я могу подтвердить, что, поскольку у меня установлены наборы инструментов для Swift 4.2 и Swift 5.0:

  • с набором инструментов Swift 4.2, поведение будет таким, как вы описали: первая печать выводит 0.0, а вторая выводит 65536.0
  • , а при использовании самой последней цепочки инструментов Swift 5.0 оба вызова print 65536.0
...