Swift:从磁盘缓存int

Swift:从磁盘缓存int,swift,caching,Swift,Caching,对于用户设置的首选项,我有时必须从磁盘读取值。为了避免不必要的(缓慢的)磁盘读取,我缓存了这些值,因此如果应用程序经常访问这些值,它将只是内存访问,而不是存储访问 下面是我近十年来一直在做的一个例子: let DEFAULT_COLUMN_COUNT = 4 var columnCount = -1 func getcolumnCount() -> Int { if(columnCount != -1) { return columnCount

对于用户设置的首选项,我有时必须从磁盘读取值。为了避免不必要的(缓慢的)磁盘读取,我缓存了这些值,因此如果应用程序经常访问这些值,它将只是内存访问,而不是存储访问

下面是我近十年来一直在做的一个例子:

let DEFAULT_COLUMN_COUNT = 4

var columnCount = -1

func getcolumnCount() -> Int {
    
    if(columnCount != -1) {
        return columnCount
    } else if let count = UserDefaults.standard.object(forKey: "COLUMN_COUNT") as? Int {
        columnCount = count
    } else {
        columnCount = DEFAULT_COLUMN_COUNT
    }
    return columnCount
}
多年来,我一直在编写类似的算法,但在这一点上,我确信一定有更聪明的方法来处理这个问题

我曾考虑编写一个小包装器,让我传递一个默认值和UserDefaults标识符,但我首先想确定Swift语言中是否已经包含了类似的内容/GitHub上是否有一个这样的小项目,或者我的方法在所有方面是否完全错误-当然这取决于具体的用例,但总体而言,这在性能方面对我来说非常有效

UserDefaults缓存信息,以避免每次需要默认值时都必须打开用户的默认数据库。当您设置默认值时,它将在进程内同步更改,并异步更改为持久存储和其他进程


因此,看起来您不应该担心“不必要的(缓慢的)磁盘读取”。

这很有趣,我将对此进行测试,但您绝对值得一提,谢谢!