Swift 4: проверка, прошла ли неделя, месяц, 2 месяца и т. Д. С момента первого запуска, используя Календарь - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь включить таймеры, чтобы кнопка появлялась через неделю, месяц, 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")
        }
    }

Какой более эффективный способ сравнения даты запуска с ожидаемой мне датой?

1 Ответ

2 голосов
/ 02 апреля 2019

Исходя из того, что я понимаю по вашему вопросу, вы хотите, чтобы кнопка отображалась, если у них было приложение более определенного времени.Если это так, я написал некоторый код, который будет вам полезен:

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")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...