Saya perlu membuat nomor acak.
Tampaknya arc4random
fungsi tersebut sudah tidak ada lagi seperti halnya arc4random_uniform
fungsinya.
Pilihan yang saya miliki adalah arc4random_stir()
, arc4random_buf(UnsafeMutablePointer<Void>, Int)
, dan arc4random_addrandom(UnsafeMutablePointer<UInt8>, Int32)
.
Saya tidak dapat menemukan dokumen apa pun tentang fungsinya dan tidak ada komentar di file header yang memberi petunjuk.
swift
arc4random
Big_Mac
sumber
sumber
Jawaban:
===== Swift 4.2 / Xcode 10 =====
Di bawah tenda yang digunakan Swift
arc4random_buf
untuk menyelesaikan pekerjaan.===== Cepat 4.1 / Xcode 9 =====
arc4random()
mengembalikan nomor acak dalam kisaran 0 hingga 4294967 295drand48()
mengembalikan nomor acak dalam kisaran 0,0 hingga 1,0arc4random_uniform(N)
mengembalikan nomor acak dalam rentang 0 hingga N - 1Contoh:
arc4random_uniform () direkomendasikan untuk konstruksi seperti
arc4random() % upper_bound
karena menghindari "bias modulo" saat batas atas bukan pangkat dua.sumber
Float.random()
saat ini ditandai Beta , dan karenanya memberi'Float' has no member 'random'
Anda juga bisa mencoba:
Saya harus menambahkan "UInt32" untuk membuatnya bekerja.
sumber
public func arc4random_uniform(_: UInt32) -> UInt32
. Jadi saya bertanya-tanya mengapa mengonversi ke parameter keUInt32
? Apakah ada hal lain yang terjadi di sini?Panggil saja fungsi ini dan berikan kisaran nomor minimum dan maksimum dan Anda akan mendapatkan nomor acak.
Misalnya seperti randomNumber (MIN: 0, MAX: 10) dan Anda akan mendapatkan nomor antara 0 sampai 9 .
Catatan: - Anda akan selalu mendapatkan keluaran berupa nomor Integer.
sumber
func randomNumber(MIN: Int, MAX: Int)-> Int{ return Int(arc4random_uniform(UInt32(MAX-MIN)) + UInt32(MIN)); }
Setelah beberapa penyelidikan saya menulis ini:
Sekarang tinggal
Math.randomFraction()
ambil bilangan random [0..1 [tanpa harus ingat seeding dulu. Semoga ini membantu seseorang: o)sumber
Perbarui dengan swift 4.2:
sumber
Pilihan lainnya adalah dengan menggunakan algoritma xorshift128plus :
Algoritme ini memiliki periode 2 ^ 128 - 1 dan lolos semua pengujian rangkaian pengujian BigCrush . Perhatikan bahwa meskipun ini adalah penghasil nomor acak semu berkualitas tinggi dengan periode yang lama, ini bukan penghasil nomor acak yang aman secara kriptografis .
Anda dapat menyemainya dari waktu saat ini atau sumber entropi acak lainnya. Misalnya, jika Anda memiliki fungsi bernama
urand64()
read aUInt64
from/dev/urandom
, Anda dapat menggunakannya seperti ini:sumber
sumber
Di Swift 3:
Ini akan menghasilkan nomor acak antara 0 hingga batas
sumber
arc4random_uniform(6) + 5
Implementasi saya sebagai ekstensi Int. Akan menghasilkan angka acak dalam jangkauan
from..<to
sumber
Ini adalah bagaimana saya mendapatkan nomor acak antara 2 int!
pemakaian:
sumber
Pilihan lainnya adalah menggunakan GKMersenneTwisterRandomSource dari GameKit. Dokumen tersebut mengatakan:
Contoh diambil dari kode sampel Apple: https://github.com/carekit-apple/CareKit/blob/master/CareKitPrototypingTool/OCKPrototyper/CareKitPatient/RandomNumberGeneratorHelper.swift
sumber
Saya terlambat ke pesta 🤩🎉
Menggunakan fungsi yang memungkinkan Anda mengubah ukuran larik dan pemilihan rentang dengan cepat adalah metode yang paling serbaguna. Anda juga bisa menggunakan peta sehingga sangat ringkas. Saya menggunakannya di semua pengujian kinerja / benchmarking saya.
elements
adalah jumlah item dalam larik yanghanya menyertakan angka dari
0...max
Code Sense / Placeholder terlihat seperti ini.
randArr(elements: Int, max: Int)
10 elemen dalam array saya mulai dari 0 hingga 1000.
sumber
Anda dapat menggunakan ini dalam tarif tertentu:
sumber
Lets Code dengan Swift untuk nomor acak atau string acak :)
itu akan memberi Anda keluaran secara acak.
sumber
Jangan lupa bahwa beberapa angka akan berulang! jadi Anda perlu melakukan sesuatu seperti ....
totalQuestions saya adalah 47.
sumber
lihat, saya punya masalah yang sama tetapi saya memasukkan fungsi sebagai variabel global
sebagai
jelas ini tidak efektif, jadi saya hanya menyalin dan menempelkan kode ke dalam fungsi sehingga dapat digunakan kembali, lalu xcode menyarankan saya untuk mengatur var sebagai konstan sehingga kode saya
itu adalah bagian dari kode saya jadi xcode memberi tahu saya sesuatu yang tidak dapat diubah dan inisialisasi tetapi, itu tetap membangun aplikasi dan saran itu hilang begitu saja
semoga membantu
sumber