我知道在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
参数出了问题?
答案 0 :(得分:2)
好。可选值可以具有实际值或nil。如果你给一个不带可选参数的函数提供可选项,你必须打开它。
一般来说:
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) }
无论如何,我强烈建议您进一步阅读有关选项的内容。