下のコードのsystemFillColor
の部分を文字列として取得する簡単な方法はありますか?
swuft
1class customLabel: UILabel { 2 3 override func awakeFromNib() { 4 super.awakeFromNib() 5 6 if let backgroundColor = backgroundColor { 7 print("backgroundColor: (backgroundColor)") 8 // => backgroundColor: <UIDynamicSystemColor: 0x28087bfa0; name = systemFillColor> 9 } 10 } 11}
原始的?な方法しか見つけられないのでご存知でしたら教えて下さい。
swift
1extension UIColor { 2 var name: String? { 3 switch self { 4 case UIColor.systemFill: return "systemFillColor" 5 ... 6 ... 7 default: return nil 8 } 9 } 10} 11
すでに検討されているとは思いますが、descriptionで取れる文字列(<UIDynamicSystemColor: 0x28087bfa0; name = systemFillColor>)の中から正規表現でname = の後ろの文字を取ってくるという方法もあるにはありますね。
ちなみに、色の名前なんて何に使うんでしょう?
回答ありがとうございます。
あー、盲点でした、出来合いのもの(メソッド・プロパティ)を探してたんですが、すでに取得できているということですね。
ラベルに設定されたフォント名・フォントカラー、背景色、境界線色を表示して比較するサンプルを作るのが目的です。
私もいろいろ試してはみましたが、
UIDynamicSystemColor型がおそらく公開されていないので、キャストしてnameを取得することもできず、
リフレクション(Mirror)で取ることも出来ず、
value(forKey: "name") でも例外が出て取れなかったので、若干詰んではいます。
descriptionから抽出する方法は、だいぶ力技かなと思いますし、将来挙動が変わった時に動作しなくなる可能性もありますので、その辺だけ注意して使ってもらえれば良いかなと思います。
いろいろありがとうございます。
将来の挙動の変更などについては、色の組み合わせ比較用のサンプルなので、実用上は問題ないです。
<UIDynamicSystemColor: 0x28087bfa0; name = systemFillColor> ←これはなんと呼べばいいものなんでしょうか?
名前もわからないのでアプローチの方法を探しようがないという…
color.descriptionとかで取れますよ、ってもう解決してますかね。
本質的には解決してないんですが、解決済みとしてしまおうと思います。いろいろありがとうございました。
回答1件
あなたの回答
tips
プレビュー