#swift #time
#swift #время
Вопрос:
У меня есть функция, которая вычисляет дату:
func getFutureTime(_ timestamp: Double) -> String {
......
return "(diffDateComponents.day) days"
}
Затем я вызываю / устанавливаю функцию, например:
futureTimeLabel.text = " (Date().getFutureTime(timeStamp))"
Но время будет отображаться как:
"Optional(4) days"
Как я могу saftley развернуть ее, чтобы она не печаталась как необязательная?
Комментарии:
1. Как вы печатаете текст? Это то, как это отображается на этикетке, или вы печатаете на консоли?
2. Также я думаю, что они понимают опции из названия вопроса.
3. Я неправильно прочитал текст, который они видели, я подумал, что он гласит «необязательно (4 дня)», и в этом случае это имело бы значение, если бы они печатали на консоли, например ‘print (futureTimeLabel.text)’, потому что свойство text в label является необязательным. Также они понимают, что разница между String и необязательной String в противном случае они бы не запутались. Они просто пропустили тот факт, что свойство day в diffDateComponents также является необязательным.
4. Да, честно, я полностью понимаю желание побудить людей к дальнейшему самообразованию. Я просто чувствовал, что это не способствует решению проблемы здесь.
Ответ №1:
Необязательный здесь diffDateComponents.day
.
Если вы действительно уверены, что day
это свойство будет значением, вы можете использовать diffDateComponents.day!
, например:
return "(diffDateComponents.day!) days"
В противном случае вы можете использовать ??
operator для установки значения по умолчанию:
return "(diffDateComponents.day ?? defaultDaysCount) days"
Или, лучшее решение:
if let days = diffDateComponents.day {
return "(days) days"
} else {
return "Default message, when there're no days in future. The End is nigh, I guess…"
}
Комментарии:
1. Отличный ответ. При ответе на вопрос о опциях всегда следует упоминать безопасное разворачивание.
Ответ №2:
Ваша проблема заключается не в типе возвращаемых функций, а в этой строке:
return "(diffDateComponents.day) days"
diffDateComponents .day — это необязательный Int, поэтому, когда вы создаете возвращаемую строку, она интерпретирует ее так, как вы видите.
разверните необязательную, как вы хотите, как / перед созданием возвращаемой строки, чтобы исправить эту проблему. Например
return "(diffDateComponents.day!) days"