Неявное преобразование теряет целочисленную точность при получении случайных чисел

Мой план состоял в том, чтобы получить случайные элементы массива, поэтому я попробовал решение, которое, во-первых, генерирует случайное число:

NSUInteger rnd = arc4random_uniform([myArray count]);

Однако я получил предупреждение «Неявное преобразование теряет целочисленную точность».

Как обойти это предупреждение? Есть ли другой способ получить случайное значение, которое не вызовет никаких предупреждений? Я предпочитаю только реализации кода, а не через настройки, как предполагают несколько ответов на подобные вопросы.


person Darius Miliauskas    schedule 11.05.2015    source источник


Ответы (1)


Просто измените код на следующий:

NSUInteger rnd = arc4random_uniform((uint32_t) [myArray count]);

Компилятор выдал предупреждение, что на вашем компьютере NSUInteger является 64-битным typedef, что может быть не так для других устройств. Следовательно, его приведение удаляет предупреждение.

person Dhruv Ramani    schedule 11.05.2015
comment
Да, это работает. Спасибо. Я сам почти нашел тот же ответ (teamtreehouse.com/forum/), но вы были первым. Возможно, это будут разные предложения. - person Darius Miliauskas; 11.05.2015
comment
Я надеюсь, что вы не получите предупреждение сейчас. - person Dhruv Ramani; 11.05.2015