Попытка преобразовать NSDate в Date и получить предупреждение

Я получаю следующее предупреждение

Принудительный бросок из «NSDate?» to 'Date' только разворачивает и соединяет; Вы хотели использовать '!' с "как"?

в следующей строке кода:

pickDate.date = item?.date as! Date

где pickDate это UIDatePicker. Код работает, и если я попытаюсь следовать рекомендуемым исправлениям, они зациклятся с другими предупреждениями или ошибками, которые не лучше.

Какие-либо предложения?


person RTB    schedule 15.07.2017    source источник
comment
Что такое item?   -  person vadian    schedule 15.07.2017
comment
элемент является сущностью   -  person RTB    schedule 16.07.2017
comment
Ни одно из этих предложений не сработало - та же проблема. Я могу обойти эту проблему, взяв количество мс с 1970 года, а затем создав новую дату, но чувствую, что должен быть более прямой подход.   -  person RTB    schedule 16.07.2017


Ответы (3)


Используя Swift 3.x (Xcode 8.3.3), я смог избавиться от предупреждения с помощью:

pickDate.date = item.date! as Date

Но это предполагает, что «элемент» больше не является необязательным (в моем коде я могу, если позволю).

person rafasgj    schedule 22.09.2017

item is a Entity не предоставляет достаточно информации (лучше включить определение сущности), но, согласно сообщению, item?.data относится к типу NSDate? (также известному как Optional<NSData>). Вы можете преобразовать NSDate в Date с помощью as-приведения, а также NSDate? в Date?:

(Обычно вы не используете as! или as? при преобразовании между NSDate и Date.)

if let theDate = item?.date as Date? {
    pickDate.date = theDate
} else {
    //Generally, silently ignoring unexpected value would be a bad habit.
    print("`item?.date` is nil")
}
person OOPer    schedule 17.07.2017

item может быть, ноль. тогда item?.data может быть ноль. попробуй это:

pickDate.date = item!.date as! Date

or

pickDate.date = (item?.date)! as Date
person simalone    schedule 17.07.2017