正确初始化存储属性的方法? - Xcode中8.3.3 /斯威夫特3
我有一类这样的:正确初始化存储属性的方法? - Xcode中8.3.3 /斯威夫特3
class Card: CustomStringConvertible {
// Init values
var id: UUID = UUID.init()
var shown: Bool = false
var image: UIImage
var sound: String = ""
init(image: UIImage) {
self.image = image
}
init(sound: String) {
self.sound = sound
}
init(card: Card) {
self.id = (card.id as NSUUID).copy() as! UUID
self.shown = card.shown
self.image = card.image.copy() as! UIImage
self.sound = card.sound
}
为什么我会得到一个错误(“从初始化返回而不初始化所有存储的属性”)在init(音:字符串)方法。据我所知,设定初始值很重要,我做了什么。
在你init(sound: String)
你不分配任何值的形象。 由于此属性是强制性的,并且没有可选项。
你有两个选择,使酒店可随意:
var image: UIImage? = nil
或指定一个新的图像对象吧:
init(sound: String) {
self.sound = sound
self.image = UIImage()
}
用我的方法,我想要初始化在这个方法中使用的值:fileprivate func randomCards(_ imageData:[UIImage],soundData:[String]) - > [Card] var cards = [Card]() 对于i中的0 ... imageData.count-1 {image:image.init(image:imageData [i]) let sound = Card.init(sound:soundData [i]) cards.append(contentsOf: [image,card.init(card:image)]) cards.append(contentsOf:[sound,Card.init(card:sound)]) } cards.shuffle() return cards }改变你的解决方案? – Martin
的'image'属性未定义... –
展开错误在问题导航器中,你会看到:''self.image'未初始化' - 编译器告诉你到底是什么问题。 –
好的,谢谢。 – Martin