#swift #swift2 #swift3
#swift #swift2 #swift3
Вопрос:
Сегодня я перешел на язык Swift 3. Я создаю приложение, которое дает обратный отсчет дней, часов, минут и секунд до события. Следующий код ниже отображает следующее в моем приложении:
Необязательно (6) дней, Необязательно (59) минут, необязательно (35) секунд.
Мой обратный отсчет в Swift 2 работал нормально, но как только я преобразовал его в Swift 3, перед цифрами появилось необязательное значение. Кто-нибудь с опытом работы в Swift 3 знает решение этой проблемы?
@IBAction func NextWeeklyButtonPressed(_ sender: AnyObject) {
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTimeWeeks), userInfo: nil, repeats: true)
timer.fire()
}
func printTimeWeeks() {
formatter.dateFormat = "MM/dd/yy hh:mm:ss a"
let startTime = Date()
let endTime = formatter.date(from: WeeklyDate.text! " 12:00:00 a")
// WeeklyDate.text is a date in short style
let timeDifference = (userCalendar as NSCalendar).components(requestedComponent, from: startTime, to: endTime!, options: [])
WeeklyDateLabel.text = "(timeDifference.day) Days (timeDifference.minute) Minutes (timeDifference.second) Seconds"
}
Комментарии:
1. Это означает, что
timeDifference.day
это необязательно. Вы посмотрели ссылку на DateComponents для Swift 3?
Ответ №1:
добавить ! к полям
WeeklyDateLabel.text = "(timeDifference.day!) Days (timeDifference.minute!) Minutes (timeDifference.second!) Seconds"
Комментарии:
1. Вероятно, не стоит принудительно разворачивать опции в этом случае (и вообще).
2. дни или месяц … никогда не быть нулевым . мы должны проверять nil для объектов, которые получают с сервера. день или месяц всегда имеют значение 😉
Ответ №2:
Вам нужно развернуть необязательные строки, например
if let day = timeDifference.day, minute = timeDifference.minute, second = timeDifference.second {
WeeklyDateLabel.text = "(timeDifference.day) Days (timeDifference.minute) Minutes (timeDifference.second) Seconds"
}