Swift でランダムなデータを生成する

テスト用のデータ作ったりするときに、ランダムなデータを作りたくなることがあります。どのように書けばいいのかよく調べてるので、メモ書きついでに記事にしときます。

数値

Int や Float などの数値は簡単にできます。 in で指定した範囲の中でランダムな数値を生成できます。

let randomInt = Int.random(in: 0..<10)
let randomFloat = Float.random(in: 0..<10)
let randomDouble = Double.random(in: 0..<10)​

文字列

候補の文字列を作成し、そこから指定した文字数を取り出すようなことをする関数を作るとよいです。

func randomString(length: Int) -> String {
  let characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  return String((0..<length).map{ _ in characters.randomElement()! })
}

日付

やり方は色々あるかと思いますが、私は Date(timeIntervalSinceNow:) をよく使います。下記のコードだと今の日付から過去365日の間でランダムに Date を生成します。

let randomDate = Date(timeIntervalSinceNow: TimeInterval(-60 * 60 * 24 * Int.random(in: 0..<365))

配列

配列では、文字列のときも使った .randomElement() を使います。 randomElement() は配列が空だった場合は null を返すので結果は nullable になってますが、空じゃないことが明らかなときは force unwrap していいと思います。空かもしれないときは if let などを使います。

let colors = ["red", "blue", "green", "yellow", "black", "white"]
let randomColor = colors.randomElement()!

let emptyArray = [String]()
if let randomElement = emptyArray.randomElement() {
  // ...
}

真偽値

Bool でも random() いけます。

let randomBool = Bool.random()

UUID

UUID はほぼ重複することないので普通に生成するだけでいいと思います。

let randomUuid = UUID()


Swift 4.2で random(in:) が追加されてめっちゃ楽にランダム値を生成できるようになりました。

この記事が気に入ったらサポートをしてみませんか?