Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 997 - Swift 4.2で乱数の扱いが変わりました!

WWDC2018の「What's New in Swift」をみていて乱数の扱いが変わったことを知りました。

乱数の発生ひとつとっても、初心者だった私はC言語APIから利用されていた「arc4random()」に違和感を感じていたし、AppleもこのC言語APIの利用はプラットフォームにより挙動が異なる欠点があったということで見直したようです。

let randomInt = Int.random(in: 1...100)
print(randomInt)
let randomFloat = Float.random(in: 0...100)
print(randomFloat)

let greetings = ["hi", "hello", "yah", "hoo"]
let randomChosenGreetg = greetings.randomElement()
print(randomChosenGreetg!)
let shuffledGreeetings = greetings.shuffled()

ここまでは問題なく理解できますが、Randm Number Generator(RNG)プロトコールの使い方がわからなです。プレセンテーションではstruct型を使って説明しているのですが意味が分かりません。ヘルプドキュメントの次のenum型使ったコードの方が分かりますね。

enum Weekday: CaseIterable {
    case sunday, monday, tuesday, wednesday, thursday, friday, saturday
    
    static func random<G: RandomNumberGenerator>(using generator: inout G) -> Weekday {
        return Weekday.allCases.randomElement(using: &generator)!
    }
    
    static func random() -> Weekday {
        return Weekday.random(using: &Random.default)
    }
}

let randomDay = Weekday.random()
print(randomDay)

struct型の項目をランダムに取り出すことができそうですが、まだ自分で利用することができませんね。RNGプロトコールを準拠するために.random()メソッドの実装はいらないのにね。

まあ難しいことは今のところ考えずに昔のプロジェクトを修正していこう