Функция Swift, которая возвращает -> String возвращает необязательную строку

#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"