【iOS】【Objective-C】16進数表記のカラーコードをランダム生成する(※arc4random_uniform()を使用)

16進数表記のカラーコード(#FFFFFFみたいな)をランダム生成するコード。

 

コード自体は下記StackOverflowの記事を参考にしています。が!そちらの記事ではランダム数値生成に “arc4random()” を使用しているため、Apple推奨の “arc4random_uniform()” を使用するよう変更しています。
cocoa – Generate random color hex in Objective-C ? – Stack Overflow

[引用]
arc4random_uniform() is recommended over constructions like “arc4random() % upper_bound” as it avoids “modulo bias” when the upper bound is not a power of two.
(訳)
arc4random_uniform()は、上限が2の累乗でないときに “modulo bias”(モジュロ・バイアス)を避けるため、 “arc4random()%upper_bound”のような構造よりも推奨されます。

もちろん16進コードでなく、RGB指定でランダムカラー生成を行う方法もあります。私はカラーコードは16進で指定したい派なだけなんで、RGB指定も全然アリです。16進/RGB どちらでも、好みで決めちゃって下さい。

RGB指定でランダムカラー生成を行う方法は、こちらブログ様が大変参考になります。
arc4random_uniform()を使ってランダムな色を取得する – not good but great

<因みに その1>
上記コードの内、『16777216』ってどこから来たの?って方は、こちらブログ様の説明が大変丁寧ですのでご参考あれ。
6ケタのカラーコードをランダムで生成する色々な方法 | q-Az

[引用]
16進法の6ケタの最大値、ffffff を10進法に直すと 16777215 でそれ以下の整数を取得して16進法に直すというやり方です。

<因みに その2>
上記AppleのMan Pageリンクからの引用内の『モジュロ・バイアス』って何?って方は、こちらブログ様の説明が大変丁寧ですのでご参考あれ。
Objective-C – arc4random()が生成する乱数の偏りについて

[引用]
割られる数である乱数は有限数です。
これが例えば0〜9であったとします。
6で割った余りを取得すると、0から順に余りは0,1,2,3,4,5,0,1,2,3となります。
0,1,2,3は2回出るのに4,5は1回しか出ないという偏りが生じます。
この偏りをmodulo bias(モジュロバイアス)と言います。

 

今回は以上です。