swift – 如何创建几个缓存的UIColor
发布时间:2020-12-14 05:33:51 所属栏目:百科 来源:网络整理
导读:我的代码中有自定义颜色.我多次使用它们,我想只分配一次. 情况/问题 如果我们看一下UIColor标题,我们可以看到以下内容: [...]// Some convenience methods to create colors. These colors will be as calibrated as possible.// These colors are cached.o
我的代码中有自定义颜色.我多次使用它们,我想只分配一次.
情况/问题 如果我们看一下UIColor标题,我们可以看到以下内容: [...] // 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扩展中: extension UIColor { convenience init(hex: String) { // ... } static let myColorOne = UIColor(hex:"AABBCC") static let myColorTwo = UIColor(hex:"DDEEFF") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |