UIColorの定義はすべて#colorLiteral使ってみることにしてみた

mono 
Swift・iOSコラム
5 min readSep 24, 2016

まだ最適解かは分かりませんが、UIColorの生成はすべて#colorLiteral使ってみることにしてみました。上のような感じになります。
Swift 3らしく、var定義かつcolor接尾辞無いのもポイントです。

Xcode 8以外で見ると次のようなテキストに見えます。

今までは、適当なライブラリ使って、#2c2c2cなどの16進数カラーコードから生成していましたが、#colorLiteralがXcode 8から導入されたので、活用することにしました。
(Xcode 7のPlaygroundでも使えましたが)

メリット

  • コード上で色が直感的に分かる
  • カラーパレットで色を指定出来る(ダブルクリックなどで後から変更可能)
  • ライブラリや独自メソッド定義不要で、標準で使える

デメリット

  • コード上で、16進数カラーコードが分かりづらい
  • Xcode 7以前では使えない(Xcodeは最新使い続けるのが正義だと思っているので個人的には全くデメリットでは無いですが)

コード上で、16進数カラーコードが分からない

こちらがやや気になるかもしれないので、要件によってはコメントで添えたりすると良いかもです。
初回実装の時に添えても良いですが、後から確認も可能です。

  1. 色をダブルクリックで色選択ダイアログを表示
  2. Otherボタン押す
  3. RGB SlidersのHEX Color #で確認

選択してコピーすると、テキストが取得出来るのでそれをテキストエディタに貼って見たりというのもまあまあ手っ取り早いですが、16進数カラーコードでは無く、#colorLiteral形式であるrgbaの小数形式です(´・ω・`)
option押しながらクリックでカラーコード見られれば最高なのですが、特に何も表示されず(´・ω・`)

小ネタ

実はコメントでも使えます

実装は通常のコードで、コメントに#colorLiteral使うのもありですね( ´・‿・`)

ただ、ドキュメンテーションコメントには、#colorLiteral効かなくて残念でした(´・︵・`)

プレーンテキストとして表示されてしまいました

カラーパレットからD&Dも出来ます

コード補完で「Image Literal」を選んだりする以外にも、カラーパレットからD&D出来たりもします(Xcode 7 Playgroud時代からの機能)。

というわけで、Swift 3対応にあたり、標準カラー(UIColor.whiteなど)と同様にvar定義・接尾辞カット対応などもした方がベターですし、そのついでに#colorLiteral化してみたらいかがでしょうヽ(・ω・`)

補足

こちらの意見いただきました。

アプリで使う情報はフレームワークと混ぜない方が好み。

今回、#colorLiteralに焦点を当てていたため、省略しましたが、以下の書き方などで区別すると分かりやすくなると思っています。

また、標準のUIColorはSwiftから見るとこういう定義になっているので、それに合わせてclass varとしていますが、static varでもほぼ同じ挙動となります。

class varとstatic var挙動の違いは、こちらの記事が参考になります。

上の例では毎回UIColorオブジェクトを生成してしまっていることについて

こちらも#colorLiteral自体の話とズレてきますが、少し補足します。

毎回生成でも実質問題無いと思いますが、static letで定義するか、あるいはそれをprivateな内部実装とした上でclass varで公開、というのが丁寧かと思います。

続きを書きました:

--

--