我的代码中有自定义颜色.我多次使用它们,我想只分配一次.
情况/问题
- [...]
- // Some convenience methods to create colors. These colors will be as calibrated as possible.
- // These colors are cached.
- open class var black: UIColor { get } // 0.0 white
- open class var darkGray: UIColor { get } // 0.333 white
- [...]
我已经创建了UIColor的扩展,如下所示:
- import UIKit
- extension UIColor {
- class func colorWithHexString(_ hex: String) -> UIColor {
- print("\(#function): \(hex)")
- // some code,then it return a UIColor
- return UIColor(
- red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,blue: CGFloat(rgbValue & 0x0000FF) / 255.0,alpha: CGFloat(1.0)
- )
- }
- // Option A
- open class var myColorOne : UIColor {
- get {
- return colorWithHexString("AABBCC")
- }
- }
- // Option B
- class func myColorTwo() -> UIColor {
- return colorWithHexString("DDEEFF")
- }
- }
从那里我可以轻松地使用我的颜色,具有变量或功能.
- // A
- UIColor.myColorOne
- // B
- UIColor.myColorTwo()
可悲的是,我对此并不满意.实际上,每次我想使用这些颜色时:都会进行新的UIColor分配.
我试过的
Apple设法让他们的颜色显然被缓存了.我也想自己这样做.我尝试了几件事,但似乎没有一件事情是理想的.
1 – 使用dispatch_once✗
在Swift页面上可见:Swift中不再提供自由函数dispatch_once.
2 – 创建常量(let)✗
3 – 创建单身〜
它确实有效(每种颜色只创建一次),具体如下
- import UIKit
- class Colors : UIColor {
- // Singleton
- static let sharedInstance = Colors()
- let myColorOne : UIColor = {
- return UIColor.colorWithHexString("AABBCC")
- }()
- let myColorTwo : UIColor = {
- return UIColor.colorWithHexString("DDEEFF")
- }()
- }
- Colors.sharedInstance.myColorOne
难道没有办法像UIColor.myColorOne那样获得我想要的颜色并让它们像Apple一样缓存吗?
您可以使用与中的相同方法
Using a dispatch_once singleton model in Swift,即静止
常量存储属性
这是懒惰地初始化(只有一次).这些可以定义
直接在UIColor扩展中:
Using a dispatch_once singleton model in Swift,即静止
常量存储属性
这是懒惰地初始化(只有一次).这些可以定义
直接在UIColor扩展中:
- extension UIColor {
- convenience init(hex: String) {
- // ...
- }
- static let myColorOne = UIColor(hex:"AABBCC")
- static let myColorTwo = UIColor(hex:"DDEEFF")
- }