可选类型String的值?没有打开;你的意思是用“!”要么 ”?”?

时间:2015-12-13 23:35:29

标签: swift optional

我知道在Swift中已经有很多关于这个错误报告的问题,但由于我是一个绝对的初学者,我想问一下这个错误意味着什么,以及我如何在我的代码中修复它?

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参数出了问题?

1 个答案:

答案 0 :(得分:2)

好。可选值可以具有实际值或nil。如果你给一个不带可选参数的函数提供可选项,你必须打开它。

一般来说:

func function(parameter: String)< - 不要选择

func function(parameter: String?)< - 选择

如果您确定它永远不会为零,只需添加!以强制解包。

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

如果不是,请添加?或使用if letguard let语法进行条件展开:

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

无论如何,我强烈建议您进一步阅读有关选项的内容。