swift – 如何创建几个缓存的UIColor

前端之家收集整理的这篇文章主要介绍了swift – 如何创建几个缓存的UIColor前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的代码中有自定义颜色.我多次使用它们,我想只分配一次.

情况/问题

如果我们看一下UIColor标题,我们可以看到以下内容

  1. [...]
  2.  
  3. // Some convenience methods to create colors. These colors will be as calibrated as possible.
  4. // These colors are cached.
  5.  
  6. open class var black: UIColor { get } // 0.0 white
  7.  
  8. open class var darkGray: UIColor { get } // 0.333 white
  9.  
  10. [...]

我已经创建了UIColor的扩展,如下所示:

  1. import UIKit
  2.  
  3. extension UIColor {
  4.  
  5. class func colorWithHexString(_ hex: String) -> UIColor {
  6.  
  7. print("\(#function): \(hex)")
  8.  
  9. // some code,then it return a UIColor
  10.  
  11. return UIColor(
  12. red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,blue: CGFloat(rgbValue & 0x0000FF) / 255.0,alpha: CGFloat(1.0)
  13. )
  14.  
  15. }
  16.  
  17. // Option A
  18. open class var myColorOne : UIColor {
  19. get {
  20. return colorWithHexString("AABBCC")
  21. }
  22. }
  23.  
  24. // Option B
  25. class func myColorTwo() -> UIColor {
  26. return colorWithHexString("DDEEFF")
  27. }
  28. }

从那里我可以轻松地使用我的颜色,具有变量或功能.

  1. // A
  2. UIColor.myColorOne
  3.  
  4. // B
  5. UIColor.myColorTwo()

可悲的是,我对此并不满意.实际上,每次我想使用这些颜色时:都会进行新的UIColor分配.

我试过的

Apple设法让他们的颜色显然被缓存了.我也想自己这样做.我尝试了几件事,但似乎没有一件事情是理想的.

1 – 使用dispatch_once✗

在Swift页面上可见:Swift中不再提供自由函数dispatch_once.

2 – 创建常量(let)✗

我收到以下错误:扩展可能不包含存储的属性

3 – 创建单身〜

它确实有效(每种颜色只创建一次),具体如下

  1. import UIKit
  2.  
  3. class Colors : UIColor {
  4.  
  5. // Singleton
  6. static let sharedInstance = Colors()
  7.  
  8. let myColorOne : UIColor = {
  9. return UIColor.colorWithHexString("AABBCC")
  10. }()
  11.  
  12. let myColorTwo : UIColor = {
  13. return UIColor.colorWithHexString("DDEEFF")
  14. }()
  15.  
  16. }

但它迫使我再增加一个文件调用我的颜色

  1. Colors.sharedInstance.myColorOne

难道没有办法像UIColor.myColorOne那样获得我想要的颜色并让它们像Apple一样缓存吗?

您可以使用与中的相同方法
Using a dispatch_once singleton model in Swift,即静止
常量存储属性
这是懒惰地初始化(只有一次).这些可以定义
直接在UIColor扩展中:
  1. extension UIColor {
  2. convenience init(hex: String) {
  3. // ...
  4. }
  5.  
  6. static let myColorOne = UIColor(hex:"AABBCC")
  7. static let myColorTwo = UIColor(hex:"DDEEFF")
  8. }

猜你在找的Swift相关文章