2015-12-13 2 views
-1

Я знаю, что в Swift есть много вопросов об этом отчете об ошибке, но поскольку я являюсь абсолютным новичком, я хотел бы спросить, что означает эта ошибка, и как я могу исправить это в своем коде?Значение необязательного типа String? не разворачивается; вы хотели использовать «!» или "?"?

required convenience init?(coder aDecoder: NSCoder) { 
    let name = aDecoder.decodeObjectForKey(PropertyKey.nameKey) as! String 

    // Because photo is an optional property of Meal, use conditional cast. 
    let characterise = aDecoder.decodeObjectForKey(PropertyKey.characteriseKey) as? String 

    let photo = aDecoder.decodeObjectForKey(PropertyKey.photoKey) as? UIImage 

    let rating = aDecoder.decodeIntegerForKey(PropertyKey.ratingKey) 

    // Must call designated initializer. 
    self.init(name: name, characterise: characterise, photo: photo, rating: rating) 
} 

Я не знаю, является ли это правда, но я думаю, что что-то не так с параметром characterise?

+0

какая строка дает сообщение? Это говорит о том, что вы назначаете необязательное значение для необязательной переменной с ее распаковкой. – Paulw11

+2

Опционы являются такой важной частью в Swift, что вы должны просто посмотреть несколько руководств по ним. –

ответ

1

Хорошо. Необязательные значения могут иметь фактическое значение или ноль. Если вы предоставляете опцию функции, которая не принимает необязательный параметр, вам необходимо ее развернуть.

В общем:

< func function(parameter: String) - Не принимать опциональный

< func function(parameter: String?) - Возьмите опциональный

Если вы уверены, что она никогда не будет ноль просто добавить ! заставить развертку.

self.init(name: name, characterise: characterise!, photo: photo, rating: rating)

Если не добавлять либо ? или сделать условную развертку с if let или guard let синтаксисом как:

if let characterise = characterise { 
self.init(name: name, characterise: characterise, photo: photo, rating: rating) } 

Во всяком случае я настоятельно рекомендую прочитать одну или две вещи о дальнейшем дополнительных опциях.

Смежные вопросы

 Смежные вопросы