【问题标题】:Swift 4: Checking if week, month, 2 months, etc. has passed since initial launch using CalendarSwift 4:检查周、月、2 个月等自使用日历首次启动以来是否已过去
【发布时间】:2019-04-02 01:25:46
【问题描述】:

我正在尝试包含计时器,以便在应用程序的初始启动日期后一周、一个月、2 个月等出现按钮。

我使用过Date.addingTimeInterval(请参见下面的代码),但在较长的时间段(周/月)内似乎效果不佳。 Swift 文档建议使用日历,但我不知道该怎么做。

override func viewDidLoad() {
       super.viewDidLoad()

        if installedDate == nil {
            installedDate = Date()
            let timer = Calendar.current

            Button1.isHidden = true
            Button2.isHidden = true
            Button3.isHidden = true
        }

        else {
            print("Not first run")
            print(installedDate!)

            let Button1Date = Date().addingTimeInterval(604800)      //for after 1 week
            let Button2Date = Date().addingTimeInterval(2592000)     //for after 1 month
            let Button3Date = Date().addingTimeInterval(5184000)     //for after 2 months


            if installedDate == Button1Date {
                Button1.isHidden = false
            }
            if installedDate == Button2Date {
                Button2.isHidden = false
            }
            if installedDate == Button3Date {
                Button.isHidden = false
            }

        }

    }

    var installedDate: Date? {
        get {
            return UserDefaults.standard.object(forKey: "installedDateKey") as? Date
        }
        set {
            UserDefaults.standard.set(newValue, forKey: "installedDateKey")
        }
    }

比较发布日期和我需要的预期日期的更有效方法是什么?

【问题讨论】:

  • 无论用户是否将应用程序置于前台,这是您希望在一个月的第二个准确发生的操作,还是您希望在用户第一次打开应用程序时发生的操作一个月后的应用程序?
  • 正如@bsod 提到的,您的问题是您以毫秒为单位比较日期。如果你想这样做,你需要将它们添加到installedDate,而不是Date(),否则这将永远不会起作用。
  • @bsod 是的,这是我希望在一个月过去后发生的动作。每次他们打开应用程序时,它都会检查自安装日期以来是否已过去一个月。我的下一步是添加一个通知,让他们知道他们有一个新按钮可供查看,我也不知道该怎么做。
  • @Wheeeeeecode 检查我的答案,我想我解决了你的问题。
  • @Wheeeeeecode,如果你没有注意到,我更新了我的答案来解决你的问题。

标签: ios swift calendar


【解决方案1】:

根据我对您的问题的了解,如果他们使用该应用的时间超过一定时间,您希望显示一个按钮。如果是这样,我已经编写了一些对您有帮助的代码:

let timeSinceInstalled = -(installedDate ?? Date()).timeIntervalSinceNow

Button1.isHidden = timeSinceInstalled < 604800
Button2.isHidden = timeSinceInstalled < 2592000
Button3.isHidden = timeSinceInstalled < 5184000

您实际上可以替换 viewDidLoad() 函数中的大部分代码,甚至是您检查 installedDate == nil 的部分。这是您的更新代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let timeSinceInstalled = -(installedDate ?? Date()).timeIntervalSinceNow
    Button1.isHidden = timeSinceInstalled < 604800
    Button2.isHidden = timeSinceInstalled < 2592000
    Button3.isHidden = timeSinceInstalled < 5184000
}

var installedDate: Date? {
    get {
        return UserDefaults.standard.object(forKey: "installedDateKey") as? Date
    }
    set {
        UserDefaults.standard.set(newValue, forKey: "installedDateKey")
    }
}

如果您想在按钮不可点击时将标题设置为“您没有可用的”,则代码如下:

override func viewDidLoad() {
    super.viewDidLoad()
    let timeSinceInstalled = -(installedDate ?? Date()).timeIntervalSinceNow
    setTitle(Button1, timeSinceInstalled < 604800)
    setTitle(Button2, timeSinceInstalled < 2592000)
    setTitle(Button3, timeSinceInstalled < 5184000)
}

func setTitle(_ button: UIButton, _ statement: Bool) {
    button.setTitle(statement ? "You have none available" : "Click me", for: .normal)
    button.isEnabled = !statement
}

var installedDate: Date? {
    get {
        return UserDefaults.standard.object(forKey: "installedDateKey") as? Date
    }
    set {
        UserDefaults.standard.set(newValue, forKey: "installedDateKey")
    }
}

【讨论】:

  • 如果我希望屏幕上出现这些按钮说“你没有可用的”直到第一个计时器过去,我该如何添加?
猜你喜欢
  • 2017-01-24
  • 2015-05-17
  • 2016-10-22
  • 2023-03-18
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多