首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@AppStorage使用了“错误的”UserDefaults

@AppStorage使用了“错误的”UserDefaults
EN

Stack Overflow用户
提问于 2021-02-17 18:35:27
回答 1查看 116关注 0票数 0

我将代码从UserDefaults更改为新的@AppStorage。

我读到在没有定义suiteName für @AppStorage的情况下它将使用UserDefaults.standard。在我的例子中,这似乎不起作用:

我可以使用这个getLastContactDownload()函数从UserDefaults.standard获取日期:

代码语言:javascript
复制
struct Defaults {

private static let userDefault = UserDefaults.standard

static func getLastContactDownload() -> Date {
    return userDefault.object(forKey: "lastContactDownload") as? Date ?? Date(timeIntervalSinceNow: -365 * 24 * 60 * 60)
}
}

我用setLastContactDownload()函数给它保存了一个值:

代码语言:javascript
复制
static func setLastContactDownload(_ lastContactDownload: Date) {
    userDefault.set(lastContactDownload, forKey: "lastContactDownload")
}

在我的视图中,我现在使用新的@AppStorage:

代码语言:javascript
复制
@AppStorage("lastContactDownload") var lastContactDownload: Date = Date(timeIntervalSinceNow: -365 * 24 * 60 * 60)

现在我希望,这会给我相同的日期:

代码语言:javascript
复制
.onAppear {
   print(lastContactDownload)
   print(Defaults.getLastContactDownload())
}

但事实并非如此。

控制台打印:

代码语言:javascript
复制
2020-02-18 10:21:22 +0000
2021-02-17 10:09:02 +0000

@AppStorage "lastContactDownload“似乎为空,并打印我定义的默认值(过去一年)。

使用lastContactDownload = Date()以新的@AppStorage方式保存和读取变量将会起作用,但我的目标是,为什么它不使用与旧方式相同的UserDefaults.standard (我想在将代码更改为@AppStorage时保留这些值)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 19:34:58

我现在发现的是:

这似乎是一个模拟器错误。如果我在一个真实的设备上执行相同的代码,我会打印出相同的日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66240209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档