SWIFT在24小时后使单例实例过期
我的应用程序中有一个单例,它保存了API访问的用户令牌。这些令牌每24小时在服务器端过期一次。我需要我的应用程序也这样做。我将值存储在UserDefaults中。我知道这不安全:)SWIFT在24小时后使单例实例过期,swift,Swift,我的应用程序中有一个单例,它保存了API访问的用户令牌。这些令牌每24小时在服务器端过期一次。我需要我的应用程序也这样做。我将值存储在UserDefaults中。我知道这不安全:) 我有一个用于singleton的类函数,它在调用时销毁它。我需要确保在初始化单例后每24小时调用一次这个类func 我做了一系列的搜索,但实际上我在Swift中找不到任何关于过期对象的信息。也许我用错了关键术语?这是我的密码: class AimsiAdminController { private sta
我有一个用于singleton的类函数,它在调用时销毁它。我需要确保在初始化单例后每24小时调用一次这个类func 我做了一系列的搜索,但实际上我在Swift中找不到任何关于过期对象的信息。也许我用错了关键术语?这是我的密码:
class AimsiAdminController {
private static var privateShared:AimsiAdminController?
class func shared() -> AimsiAdminController {
guard let unwrappedShared = privateShared else {
privateShared = AimsiAdminController()
return privateShared!
}
return unwrappedShared
}
class func destroy() {
privateShared = nil
}
let securityToken: String
private let defaults = UserDefaults.standard
private init() {
self.securityToken = self.defaults.string(forKey: "securityToken") ?? ""
}
}
这样:
private init() {
self.securityToken = self.defaults.string(forKey: "securityToken") ?? ""
let interval = DispatchTime.now() + 24 * 60 * 60
DispatchQueue.main.asyncAfter(deadline: interval) { AimsiAdminController.destroy() }
}
每次初始化时,它都会在给定时间后调用destroy,方法如下:
private init() {
self.securityToken = self.defaults.string(forKey: "securityToken") ?? ""
let interval = DispatchTime.now() + 24 * 60 * 60
DispatchQueue.main.asyncAfter(deadline: interval) { AimsiAdminController.destroy() }
}
每次初始化时,它都会在给定时间后调用destroy上面评论中@Vicaren提供的链接正是我所需要的。希望我在这个问题中使用的术语能帮助其他人找到这个答案,因为我在搜索自己时找不到。以上评论中@Vicaren提供的链接正是我所需要的。希望我在这个问题中使用的术语能帮助其他人找到这个答案,因为我自己搜索时找不到它。“我需要确保在初始化单例后每24小时调用一次这个类func。”不清楚为什么这么难。记录初始化时间并开始观察时钟(间隔为一分钟的重复计时器即可)。如果24小时或更长时间过去了,答对了。您可以检查服务器是否应该提供临时令牌,用户只需手动更改设备上的日期和时间即可。您不需要一个单例就可以读取用户默认值。但objective-c-ish
privateShared
属性用于什么?请,这是斯威夫特。使用常量:static let shared=AimsiAdminController()
并删除整个shared()
方法<代码>静态常量被惰性地初始化为默认值。“我需要确保在初始化单例后每24小时调用一次此类func。”不清楚为什么这很难。记录初始化时间并开始观察时钟(间隔为一分钟的重复计时器即可)。如果24小时或更长时间过去了,答对了。您可以检查服务器是否应该提供临时令牌,用户只需手动更改设备上的日期和时间即可。您不需要一个单例就可以读取用户默认值。但objective-c-ishprivateShared
属性用于什么?请,这是斯威夫特。使用常量:static let shared=AimsiAdminController()
并删除整个shared()
方法<代码>静态常量被惰性地初始化为默认值。但不推荐使用。为什么不推荐使用它呢?因为单例定义的核心。我更喜欢在即将到来的swift中使用属性包装器
,以满足此类需求。感谢您的回答,但上面评论中@vicare提供的链接正是我所需要的。但不推荐。您为什么不推荐它?因为单例定义的核心。我更喜欢在即将到来的swift中使用属性包装器
,以满足此类需求。感谢您的回答,但@Vicaren在上述评论中提供的链接正是我所需要的。