SwiftでセッションIDなどのランダム英数字を生成させたい時
ポイント
arc4random()
ではなく、arc4random_uniform(UInt32)
を使用するのがポイントarc4random()を使うとクラッシュする
arc4random()
は乱数を生成させる関数ですが、Intにキャストする際に32bit端末ではクラッシュします。iPhone5や4Sなど、初代iPad Air以前は32bitarc4random
はunsigned 32 bit integerを返しますが、つまり0から4,294,967,295まで。IntはiPhone5で32ビットの整数と5S上の64ビット整数です。
arc4random()
はiPhone5上のIntの倍の正の範囲を持っているUInt32型を返すので、クラッシュする可能性が50%あります。
また詳細は記述しませんが、ランダム性に少しバイアスがあるarc4random()のずれを補正し、int型に変換しても安全なのがarc4random_uniform()です。
実装
引数の数だけ、a-zの小文字大文字、0-9を組み合わせた文字列を生成します。
arc4random_uniform
を使用参照
Generate random alphanumeric string in Swift
http://stackoverflow.com/questions/26845307/generate-random-alphanumeric-string-in-swift
http://stackoverflow.com/questions/26845307/generate-random-alphanumeric-string-in-swift
Objective-Cの乱数作成はarc4random_uniform
http://tanukichi566.blog.fc2.com/blog-entry-57.html
http://tanukichi566.blog.fc2.com/blog-entry-57.html
[Swift][iOS]64bit対応におけるarc4random()について
http://qiita.com/kiguchi/items/c75d6d3da05b3e8d80d9
http://qiita.com/kiguchi/items/c75d6d3da05b3e8d80d9