gpt4 book ai didi

swift - 如何创建多个缓存的 UIColor

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:16 25 4
gpt4 key购买 nike

我的代码中有自定义颜色。我多次使用它们,但我希望它们只分配一次。

情况/问题

如果我们看一下 UIColor header ,我们可以看到以下内容:

[...]

// 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 页面所示:免费函数 dispatch_once 在 Swift 中不再可用。

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")
}

关于swift - 如何创建多个缓存的 UIColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42123954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com