UIColorからCIColorの変換で少しはまった話

エラー概要

先日iOSアプリの開発中にCIColor型で黒色の値を取得しようとして次のようなコードを書いた。

let blackColor: CIColor = UIColor.black.ciColor

ビルドしてもエラーがないので、このままRun出来ると思ったらこのエラーでアプリが落ちた。

reason: '*** -CIColor not defined for the UIColor UIExtendedGrayColorSpace 0 1; need to first convert colorspace.'

解決策

上のエラーをググれば案外簡単に出てくる。どうやらUIColorciColorのプロパティは使えないらしいので、CIColor(cgColor: CGColor)を使う必要がある。

let blackColor: CIColor = CIColor(cgColor: UIColor.black.cgColor)

まとめ

このエラーのやっかいなところはビルドは通るが、Run時に初めて分かるところ。 単にCIColorを使いたいのであれば

let blackColor: CIColor = CIColor.black

としたほうがよい。