#ios #swift #time #uitextfield
#iOS #swift #время #uitextfield
Вопрос:
Кто-нибудь знает, какой метод использовать, чтобы настроить автоматическое изменение входных данных UITextView каждые 24 часа? У меня длинный массив строк, и я просто хочу, чтобы TextView отображал новый элемент в этом массиве каждые 24 часа.
Комментарии:
1. Не могли бы вы, пожалуйста, быть более конкретными? Например, как хранится массив? Что должно произойти после использования всех строк в массиве?
2. Я думал, что это как можно проще. Просто сохраните массив внутри класса ViewController как let-константу, и когда выполнение массива закончится, все просто начнется сначала.
Ответ №1:
Предположим, у вас есть
var arr = ["con1","con2","con3"]
Затем, когда вы открыли приложение
if let date2 = UserDefaults.standard.object(forKey: "date") as? Date {
var time = Date().timeIntervalSince(date2)
var res = Int(time.truncatingRemainder(dividingBy:86400))! // 86400 = 24hrs * 60 * 60
if res < arr.count {
textView.text = arr[res]
}
}
else {
// first open
textView.text = arr.first!
UserDefaults.standard.set(Date(),forKey:"date")
}
Комментарии:
1. Это не будет корректно работать в дни, в которых нет 86400 секунд.
2. Привет. Я вижу логику, стоящую за вашими кодами. Однако у меня есть некоторые проблемы с этим. Может быть, это просто я глупый, но я не понимаю, почему вы переводите строки массива в текстовое поле, написав: arr [res] ? И у xCode также есть проблема с этой частью кода
3. Я говорю о вашей математике даты. Это не имеет никакого отношения к размеру массива. Вероятно, более уместно использовать
Calendar
для получения разницы в днях между двумя датами, чем сравнивать количество секунд с 86400. Не во всех днях содержится 86400 секунд.4. Насколько я знаю, это на месяц, а не на день, у кого есть 30 / 31 / 28 но день равен 24 часам, никогда не встречалось других 23/25 часов в день
5. Возможно, там, где вы живете, у них нет режима экономии времени при дневном освещении.