timeatf1TextField
и timeatf2TextField
не содержат двойников, они содержат String
s, представляющие форматированное время.
Вместо этого у меня было бы два свойства типа Date
, которые отмечают начало и время. Когда вызывается соответствующая функция markXxx
, вы должны установить Date
для соответствующего свойства (как вы делаете, но для свойства, а не локальной переменной)
Это будет означать, что вам не нужно анализировать String
значения обратно в Date
значение
Тогда я бы использовал Date#timeIntervalSince(Date)
, чтобы вычислить разницу между этими значениями
Кроме того, формат даты, который вы, вероятно, хотите использовать: HH:mm:ss
(MM
- месяц)
@IBOutlet weak var timeatf1TextField: UITextField!
@IBOutlet weak var timeatf2TextField: UITextField!
@IBOutlet weak var timediffTextField: UITextField!
var dateFormat: DateFormater = {
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:mm:ss"
}()
// Yes, this could be an array
var mark1: Date?
var mark2: Date?
@IBAction func markf1Button(_ sender: Any) {
mark1 = Date()
let dateString = dateFormat.string(from: mark1 ?? Date())
timeatf1TextField.text = dateString
}
@IBAction func markf2Button(_ sender: Any) {
mark2 = Date()
let dateString = dateFormat.string(from: mark2 ?? Date())
timeatf2TextField.text = dateString
}
Тогда при необходимости ...
guard let mark1 = mark1, let mark2 = mark2 else {
return
}
let time: TimeInterval = mark2.timeIntervalSince(mark1)
Вы можете использовать что-то вроде DateComponentsFormatter
, чтобы отформатировать полученную длительность во что-нибудь удобочитаемое для человека