SWIFT在24小时后使单例实例过期

SWIFT在24小时后使单例实例过期,swift,Swift,我的应用程序中有一个单例,它保存了API访问的用户令牌。这些令牌每24小时在服务器端过期一次。我需要我的应用程序也这样做。我将值存储在UserDefaults中。我知道这不安全:) 我有一个用于singleton的类函数,它在调用时销毁它。我需要确保在初始化单例后每24小时调用一次这个类func 我做了一系列的搜索,但实际上我在Swift中找不到任何关于过期对象的信息。也许我用错了关键术语?这是我的密码: class AimsiAdminController { private sta

我的应用程序中有一个单例,它保存了API访问的用户令牌。这些令牌每24小时在服务器端过期一次。我需要我的应用程序也这样做。我将值存储在UserDefaults中。我知道这不安全:)


我有一个用于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-ish
privateShared
属性用于什么?请,这是斯威夫特。使用常量:
static let shared=AimsiAdminController()
并删除整个
shared()
方法<代码>静态常量被惰性地初始化为默认值。但不推荐使用。为什么不推荐使用它呢?因为单例定义的核心。我更喜欢在即将到来的swift中使用
属性包装器
,以满足此类需求。感谢您的回答,但上面评论中@vicare提供的链接正是我所需要的。但不推荐。您为什么不推荐它?因为单例定义的核心。我更喜欢在即将到来的swift中使用
属性包装器
,以满足此类需求。感谢您的回答,但@Vicaren在上述评论中提供的链接正是我所需要的。