我的代码中有自定义颜色。我多次使用它们,我只希望分配一次。
如果我们看一下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
[...]
我创建了一个extension
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分配。
苹果设法使它们的颜色明显被缓存。我也想这样做。我已经尝试了几件事,但似乎都没有理想的选择。
在Swift页面上可见: free功能dispatch_once
在Swift中不再可用。
我收到以下错误: 扩展名可能不包含存储的属性
它可以通过以下方式工作(每种颜色只能创建一次)
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
并像苹果一样缓存它们?
您可以使用与在Swift中使用dispatch_once单例模型中相同的方法
,即静态常量存储的属性(这些属性是惰性初始化的(且仅初始化一次))。这些可以直接在UIColor
扩展中定义:
extension UIColor {
convenience init(hex: String) {
// ...
}
static let myColorOne = UIColor(hex:"AABBCC")
static let myColorTwo = UIColor(hex:"DDEEFF")
}
本文向大家介绍HTML缓存中单个URL有几个不同的缓存?,包括了HTML缓存中单个URL有几个不同的缓存?的使用技巧和注意事项,需要的朋友参考一下 您需要在列表的CACHE部分中提供的所有资源上使用远期到期日期。此外,在CACHE部分的每个文件中添加时间戳后缀- 当服务器上的任何文件更改时,要更改时间戳,您需要更新列表。下一次下载了带有修改后的时间戳的文件。
我有一个使用Spring缓存注释的Spring Boot应用程序。现在我想迁移到JSR-107(JCache)注释。 这是我的方法: 我希望我的新方法是这样的: 计算器输入类: @CacheKey注释指示spring将整个CalculatorInput对象存储为Key。我只想使用CalculatorInput类的属性id作为键。 我如何创建一个缓存键(就像我在Spring缓存注释中所做的那样),但
RxJava v1.0.13引入了一种新的可观测的类型:rx。单身。它非常适合请求-响应模型,但缺乏引入像doOnNext()这样的运算符的标准副作用。因此,很难让多种事情发生。 我的想法是用同一个单一实例的多个订阅替换doOnNext()。但这可能会导致基础工作进行多次:每次订阅一次。 例如rx。单一实施: 用法: 是否可以创建Single的实例,即使它是Single,也不会多次获取SomeDa
问题内容: 我有一个JpaRepository在Spring MVC应用程序中持久保存新创建的实体。这个实体看起来像这样(非常简化): 和版本实体: 我创建一个这样的翻译对象 其中11是从一开始就已经存在于数据库中的版本。请注意,我没有为ClientVersionDTO 设置和的值。 然后,我有一个持久化新对象的服务(我使用库将DTO转换为实体) 请注意我的评论“ t2.getVersion()返
问题 在创建一个类的对象时,如果之前使用同样参数创建过这个对象, 你想返回它的缓存引用。 解决方案 这种通常是因为你希望相同参数创建的对象时单例的。 在很多库中都有实际的例子,比如 logging 模块,使用相同的名称创建的 logger 实例永远只有一个。例如: >>> import logging >>> a = logging.getLogger('foo') >>> b = logging
问题内容: 我想在.net C#应用程序上使用数据缓存。到目前为止,我添加了数据缓存并在特定表上添加了SQL缓存依赖项。但这还不够。这些表将被过于频繁地更新,但是与许多缓存的对象无关。这将使数据缓存几乎无用,因为它将被频繁刷新。我想在每个对象的特定行上实现sql缓存依赖项。我怎样才能做到这一点? 问题答案: 您需要了解SqlDependency的工作方式。您订阅一个结果集,并在该结果集发生更改时得