【问题标题】:How to generate a randomString for every 1 hour in swift?如何在swift中每1小时生成一个随机字符串?
【发布时间】:2019-05-21 06:32:38
【问题描述】:

在我的应用程序中,我们发送 TimeStamp 以及用于 API 调用的参数以从中获取数据。我可以使用任何随机字符串来传递值,但我使用的是 TimeStamp,因为它每次都会不同,因此我每次都可以获得新数据而无需兑现。现在我们的要求是每小时更新一次 TimeStamp,这样每次我调用 API 而不是每次都显示新数据时,数据将每小时更新一次。

我的 API 如下所示:

let url = "https://myurl.api.getthisapidata?id=\(someID)&nocache=\(timeStamp)"

现在我想代替 TimeStamp 发送一些随机字符串,例如 "\(arc4random())"。但我希望这个随机字符串仅在一小时后更改,以便我转到其他视图或关闭应用程序并在一小时前打开它,这个随机字符串应该保持不变。

我希望你能理解我想要表达的意思。

时间戳扩展:

extension Date {
    var ticks: UInt64 {
        let timeStamp = UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
        return timeStamp
    }
}

用法:

print(Date().ticks)

【问题讨论】:

  • 我认为您仍然应该使用timeStamp,但这次您需要将其存储在Userdefaults 中并每次检查时差是否超过一个小时,然后发送并存储新的时间戳,否则使用保存了一个。
  • 发送Int(timeStamp) / 3600 怎么样,每小时会有一个不同的号码?
  • @Sweeper 它不是那样工作的。我将添加获取时间戳的代码,以便您可以提出任何更改建议。
  • @Kamran 如何做到这一点,我尝试了几种使用 Timer 类的不同方法。但他们没有工作。
  • 您的“滴答声”以 100 纳秒为间隔递增,比较 stackoverflow.com/a/39830452/1187415。 @Sweeper 的建议类似于Int(Date().timeIntervalSince1970)/3600,它会每小时增加一次。

标签: swift timer


【解决方案1】:

使用component(_:from:) 方法从当前日期获取当前小时值。然后附加一个随机字符串。

class RandomStringGenerator: NSObject {
    static let shared = RandomStringGenerator()
    var oldString:String {
        get {
            return UserDefaults.standard.string(forKey: "oldString") ?? ""
        }
        set {
            UserDefaults.standard.set(newValue, forKey: "oldString")
        }
    }
    func getString() -> String {
        let random = Int64.random(in: 10_000_00..<10_000_000)
        let hour = Calendar.current.component(.hour, from: Date())
        if !oldString.hasPrefix("\(hour)") {
            oldString = "\(hour)" + "\(random)"
        }
        return oldString
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多