Ich muss eine Zufallszahl generieren.
Es scheint, dass die arc4random
Funktion nicht mehr existiert, ebenso wie die arc4random_uniform
Funktion.
Die Optionen , die wir haben sind arc4random_stir()
, arc4random_buf(UnsafeMutablePointer<Void>, Int)
und arc4random_addrandom(UnsafeMutablePointer<UInt8>, Int32)
.
Ich kann keine Dokumente zu den Funktionen finden und keine Kommentare in den Header-Dateien geben Hinweise.
swift
arc4random
Big Mac
quelle
quelle
Antworten:
===== Swift 4.2 / Xcode 10 =====
Unter der Haube
arc4random_buf
erledigt Swift seine Arbeit.===== Swift 4.1 / Xcode 9 =====
arc4random()
Gibt eine Zufallszahl im Bereich von 0 bis 4 zurück. 294 967 295drand48()
gibt eine Zufallszahl im Bereich von 0,0 bis 1,0 zurückarc4random_uniform(N)
gibt eine Zufallszahl im Bereich von 0 bis N - 1 zurückBeispiele:
arc4random_uniform () wird gegenüber Konstruktionen empfohlen,
arc4random() % upper_bound
da es "Modulo Bias" vermeidet, wenn die Obergrenze keine Zweierpotenz ist.quelle
Float.random()
ist derzeit als Beta markiert und gibt so'Float' has no member 'random'
Sie könnten auch versuchen:
Ich musste "UInt32" hinzufügen, damit es funktioniert.
quelle
public func arc4random_uniform(_: UInt32) -> UInt32
. Ich frage mich also, warum ich in den Parameter konvertiereUInt32
? Passiert hier noch etwas?Rufen Sie einfach diese Funktion auf und geben Sie den minimalen und maximalen Zahlenbereich an. Sie erhalten eine Zufallszahl.
zB wie randomNumber (MIN: 0, MAX: 10) und Sie erhalten eine Zahl zwischen 0 und 9 .
Hinweis: - Sie erhalten immer eine Ganzzahl.
quelle
func randomNumber(MIN: Int, MAX: Int)-> Int{ return Int(arc4random_uniform(UInt32(MAX-MIN)) + UInt32(MIN)); }
Nach einigen Nachforschungen schrieb ich Folgendes:
Jetzt können Sie nur
Math.randomFraction()
noch Zufallszahlen [0..1 [erhalten, ohne sich zuerst an das Seeding erinnern zu müssen. Hoffe das hilft jemandem: o)quelle
Update mit Swift 4.2:
quelle
Eine weitere Option ist die Verwendung des xorshift128plus- Algorithmus:
Dieser Algorithmus hat eine Periode von 2 ^ 128 - 1 und besteht alle Tests der BigCrush -Testsuite. Beachten Sie, dass dies zwar ein qualitativ hochwertiger Pseudozufallszahlengenerator mit langer Laufzeit ist, jedoch kein kryptografisch sicherer Zufallszahlengenerator .
Sie könnten es aus der aktuellen Zeit oder einer anderen zufälligen Entropiequelle aussäen. Wenn Sie beispielsweise eine Funktion mit dem Namen
urand64()
aUInt64
from haben/dev/urandom
, können Sie diese folgendermaßen verwenden:quelle
quelle
In Swift 3:
Es wird eine Zufallszahl zwischen 0 und 0 generiert
quelle
arc4random_uniform(6) + 5
Meine Implementierung als Int-Erweiterung. Erzeugt Zufallszahlen im Bereich
from..<to
quelle
So bekomme ich eine Zufallszahl zwischen 2 Ints!
Verwendung:
quelle
Eine weitere Option ist die Verwendung von GKMersenneTwisterRandomSource von GameKit. Die Dokumente sagen:
Beispiel aus Apples Beispielcode: https://github.com/carekit-apple/CareKit/blob/master/CareKitPrototypingTool/OCKPrototyper/CareKitPatient/RandomNumberGeneratorHelper.swift
quelle
Ich bin zu spät zur Party 🤩🎉
Die vielseitigste Methode ist die Verwendung einer Funktion, mit der Sie die Größe des Arrays und die Bereichsauswahl im laufenden Betrieb ändern können. Sie können auch eine Karte verwenden, damit diese sehr übersichtlich ist. Ich benutze es in all meinen Leistungstests / Benchmarking.
elements
ist die Anzahl der Elemente im Array, einschließlich der Nummern von
0...max
Code Sense / Platzhalter sehen so aus.
randArr(elements: Int, max: Int)
10 Elemente in meinem Array von 0 bis 1000.
quelle
Sie können dies in einer bestimmten Rate verwenden:
quelle
Lässt Code mit Swift für die Zufallszahl oder Zufallszeichenfolge :)
Sie erhalten eine zufällige Ausgabe.
quelle
Vergessen Sie nicht, dass sich einige Zahlen wiederholen! Sie müssen also so etwas wie ...
Meine Gesamtzahl der Fragen war 47.
quelle
schau, ich hatte das gleiche Problem, aber ich füge die Funktion als globale Variable ein
wie
Offensichtlich ist dies nicht effizient, also kopiere ich einfach den Code und füge ihn in die Funktion ein, damit er wiederverwendbar ist. Dann schlägt mir xcode vor, die Variable so konstant wie meinen Code zu setzen
Nun, das ist ein Teil meines Codes, also sagt mir xcode etwas von unveränderlich und initialisiert, aber es baut die App trotzdem auf und dieser Rat verschwindet einfach
ich hoffe es hilft
quelle