Swift randomFloat проблема: «4294967295» точно не представляется как «Float» [дубликат]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

1
задан Sulthan 7 April 2019 в 17:20
поделиться

2 ответа

Как вы знаете, Float имеет только 24-битовое значение, поэтому 32-битное значение 0xFFFFFFFF будет усечено. Итак, Swift предупреждает вас, что Float не может точно представлять значение 0xFFFFFFFF.

Краткое исправление было бы примерно таким:

let randomValue: CGFloat = CGFloat(Float(arc4random()) / Float(0xFFFFFFFF))

При использовании Float.init в явном виде Swift не будет генерировать такие предупреждения.


Но предпочтительным способом было бы использовать метод random(in:), как предложено в ответе Мэтта:

return CGFloat(Float.random(in: from...to))

или просто:

return CGFloat.random(in: from...to)
0
ответ дан OOPer 7 April 2019 в 17:20
поделиться

Самое простое решение: отказаться от своего кода и просто позвонить https://developer.apple.com/documentation/coregraphics/cgfloat/2994408-random .

0
ответ дан matt 7 April 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: