portanto, meu objetivo neste código-bit é rolar aleatoriamente dois dados e, como todos sabemos, seu dado regular possui apenas 6 lados, então importei o Foundation para acessar arc4random_uniform (UInt32). Tentei usar o intervalo de (1..7) para evitar obter aleatoriamente 0, no entanto, retornou um erro do qual não gostei muito. Eu tentei fazer isso:
dice1 = arc4random_uniform(UInt32(1..7))
no entanto que retornou
Não foi possível encontrar uma sobrecarga para 'init' que aceita os argumentos fornecidos
Espero que essa informação seja suficiente para as suas dívidas incríveis por aí para me ajudar :)
Por favor, note que estou apenas fazendo isso em um playground para praticar rapidamente. Não é imperativo que eu aprenda como fazer isso; sou apenas eu mexendo antes de começar a criar aplicativos reais: D
//imports random number function
import Foundation
//creates data storage for dice roll
var dice1: UInt32 = 0
var dice2: UInt32 = 0
//counter variable
var i = 0
//how many times snake eyes happens
var snakeeyes = 0
//how many times a double is rolled
var `double` = 0
//rolls dice 100 times
while i < 100{
//from here
//sets dice roll
Isso retorna um erro de 'Range $ T3' não é conversível em UInt32
dice1 = arc4random_uniform(1..7) dice2 = arc4random_uniform(1..7)
//checks for snake eyes
if dice1 == 1 && dice2 == 1 {
snakeeyes = snakeeyes + 1
}
//checks for doubles
if dice1 == dice2{
`double` = `double` + 1
}
//increases counter
i = i + 1
//to here
}
println("You got Snake Eyes \(snakeeyes) times.")
println("You got Doubles, \(`double`) times.")
fonte
dice1 = arc4random_uniform(6) + 1
para obter o intervalo de 1 a 6. No entanto, eu não faço o objetivo C do iOS, nem tenho conhecimento de linguagem rápida. O método aleatório deve retornar de 0 a 5 e + 1 será de 1 a 6. #u_int32_t arc4random_uniform(u_int32_t upper_bound);
Respostas:
Eu acredito que você deveria fazer
para obter o intervalo de 1 a 6. Não faço o objetivo C do iOS, nem tenho conhecimento de linguagem rápida. O método aleatório deve retornar um valor entre 0 e 5, e + 1 o tornará um valor entre 1 e 6.
Se você precisar de um intervalo entre, digamos 10 - 30, basta fazer
fonte
Eu fiz uma extensão do tipo Int. testado no playground, espero que seja útil. Também aceita intervalos negativos:
use como
ou defina-a como uma extensão Range como propriedade como esta:
fonte
Muitas respostas boas, mas eu só queria compartilhar minha função pessoal de geração de números aleatórios Swift favorita para números inteiros positivos:
Swift 2
Swift 3
Aqui está uma atualização rápida do Swift 3 e, como bônus, agora funciona para qualquer tipo de valor que esteja em conformidade com o protocolo SignedInteger - muito mais conveniente para aplicativos de dados principais que precisam especificar Int16, Int32 etc. Como uma observação rápida, se você realmente precisa que ele funcione em números inteiros não assinados, apenas copie a função inteira e substitua
SignedInteger
porUnsignedInteger
etoIntMax()
comtoUIntMax()
.Swift 4
Graças à remoção do toIntMax () no Swift 4, agora precisamos usar um meio diferente de converter para um tipo inteiro comum. Neste exemplo, estou usando o Int64, que é grande o suficiente para meus propósitos, mas se você estiver usando números inteiros não assinados ou tiver um tipo personalizado Int128 ou Int256, deverá usá-los.
Mais uma vez, para o total de arquivos aleatórios, aqui está uma extensão que retorna um elemento aleatório de qualquer
Collection
objeto de tipo. Observe que isso usa a função acima para gerar seu índice, assim você precisará de ambos.Uso
retorna um número aleatório entre 1 e 6.
retorna um número entre 50 e 100 inclusive. Naturalmente, você pode substituir os valores de 50 e 100 pelo que quiser.
Swift 4.2
Infelizmente, minha melhor resposta StackOverflow ficou obsoleta finalmente. Agora você pode usar simplesmente
Int.random(in: 1 ... 6)
para gerar um número aleatório em um determinado intervalo. Também funciona para outras formas de número inteiro e número de ponto flutuante. Os tipos de coleção agora também fornecemshuffle()
erandomElement()
funções. Portanto, não há mais necessidade de funções de randomização sofisticadas, a menos que você queira usar um tipo específico de randomizador.fonte
randomNumber(-3 ... -1)
funciona desde que você tenha espaços antes e depois do...
. Você também poderandom(-3 ..< -1
excluir o último número.ClosedInterval
vez deRange
se você quiser que este funcione com não-inteiros.De acordo com o Swift 4.2, agora é fácil obter números aleatórios como este
para mais detalhes confira isso
fonte
Se você quiser, crie isso para números aleatórios. esta é a extensão do número Int e Double, Float
USAR :
fonte
Swift 3/4:
fonte
Isso ocorre porque arc4random_uniform () é definido da seguinte maneira:
Ele pega um UInt32 como entrada e cospe um UInt32. Você está tentando transmitir um intervalo de valores. arc4random_uniform fornece um número aleatório entre 0 e o número que você passa (exclusivamente); portanto, se, por exemplo, você deseja encontrar um número aleatório entre -50 e 50, como
[-50, 50]
você pode usararc4random_uniform(101) - 50
fonte
Modifiquei a resposta do @DaRk -_- D0G para trabalhar com o Swift 2.0
fonte
Rápido:
fonte
Em rápida ...
Isso é inclusivo, a chamada
random(1,2)
retornará 1 ou 2. Isso também funcionará com números negativos.fonte
A resposta é apenas 1 código de linha:
A solução alternativa é:
Embora a desvantagem seja que o número não pode começar de 0.
fonte
Desde o Swift 4.2:
Usado como:
fonte
Edit: Swift 4.2+ fornece isso agora:
É idiomático para mim estender
Range
:Em uso:
fonte
C
. Diverta-se!Consegui criar um número aleatório usando o seguinte código:
Espero que isso possa ajudá-lo.
fonte
Solução Swift 3 Xcode Beta 5. Baseado na resposta de Ted van Gaalen.
fonte
var rangeFromLimits = arc4random_uniform ((UPPerBound - LOWerBound) + 1)) + LOWerBound;
fonte
espero que isso esteja funcionando. fazer número aleatório entre o intervalo para arc4random_uniform ()?
fonte
Provavelmente alguém achará útil esta versão um pouco atualizada da
Range
extensão da resposta de Ted van Gaalen usando o Swift 4 / Xcode 9+ :Ou essa é uma solução um pouco "hacky" para oferecer suporte a intervalos abertos e fechados:
Não tenho certeza se existe uma maneira de adicionar propriedades aos dois tipos de intervalos simultaneamente.
fonte