私はアプリケーションのスタイルを管理するための列挙型を作成しました。その場合、その列挙型はUIColor型またはCAGradientLayerを返すようにします。これは私が持っているコードですが、実際にはうまくいきますが、毎回私が使用するたびに、私はダウンキャストしなければなりません。ダウンキャストされた価値を返す方法はありますか?ダウンキャスト型を返す
import UIKit
enum Theme {
case darkBackground
case lightBackground
case gradientBackground
case darkText
case lightText
}
extension Theme {
var value: Any {
var instanceColor: UIColor = .clear
var gradient: CAGradientLayer?
switch self {
case .darkBackground:
instanceColor = .black
case .lightBackground:
instanceColor = UIColor(white: 0.9, alpha: 1)
case .darkText:
instanceColor = .darkText
case .lightText:
instanceColor = UIColor(white: 0.9, alpha: 1)
case .gradientBackground:
gradient = CAGradientLayer()
gradient?.colors = [UIColor.init(hexString: "#516395").cgColor, UIColor.init(hexString: "#614385").cgColor]
}
return gradient != nil ? gradient : instanceColor
}
}
使用例
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = Theme.lightBackground.value as? UIColor
}
を、あなたが実際に[値]を使用するいくつかのコードを表示することができますか? – luk2302
@ luk2302使用例を更新しました。 –
Swiftのタイプのシステムのためにこれが可能であるとは思わないでください。より洗練された解決策は、 'UIColor'と' CAGradientLayer'を 'UIColor.light'、' UIColor.dark'などの静的変数で拡張することです。 –