Как найти случайное число между UInt64? (Свифт)

У меня возникли проблемы с поиском способа вернуть случайное число от 1 до 9 000 000 000 000 000

Я сделал функцию randomNumberBetween, используя UInt32, но я просто не смог сделать то же самое, используя UInt64.

Я понимаю, что arc4random_uniform использует только UInt32. Но есть ли альтернатива UInt64?

Кто-нибудь знает сейчас?

Спасибо за вашу помощь!

let min:UInt32 = 1
let max:UInt32 = UINT32_MAX

func randomNumberBetween(min:UInt32, max:UInt32) -> UInt32 {
    let randomNumber = arc4random_uniform(max - min) + min
    return randomNumber
}

randomNumberBetween(min, max)

person Troy R    schedule 12.08.2015    source источник
comment
Отличный ответ приведен здесь: stackoverflow.com/a/25129039/23649   -  person jtbandes    schedule 12.08.2015
comment
Я вижу, что в этом вопросе есть дубликат, но я попытался использовать ответ (stackoverflow.com/a/25129039/2074667) предоставлен, но я получаю сообщение об ошибке: Невозможно вызвать «arc4random_buf» со списком аргументов типа «(inout T, UInt)»   -  person Troy R    schedule 12.08.2015
comment
arc4random_buf принимает Int для параметра размера в Swift 2, а не UInt.   -  person jtbandes    schedule 12.08.2015


Ответы (1)


arc4random хорошо работает в Swift, но базовые функции ограничены 32-битными целочисленными типами (Int является 64-битным на iPhone 5S и современных компьютерах Mac). Вот общая функция для случайного числа любого типа:

func arc4random <T: IntegerLiteralConvertible> (type: T.Type) -> T {
    var r: T = 0
    arc4random_buf(&r, UInt(sizeof(T)))
    return r
}

прочитайте этот документ, я надеюсь, что он поможет вам http://www.dahuatu.com/G9wRqYlmME.html

person Jay Bhalani    schedule 12.08.2015
comment
Я получаю следующую ошибку при попытке использовать эту функцию: Не удается вызвать «arc4random_buf» со списком аргументов типа «(inout T, UInt)» - person Troy R; 12.08.2015