2017-08-25 37 views
0

我有一类这样的:正确初始化存储属性的方法? - 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(音:字符串)方法。据我所知,设定初始值很重要,我做了什么。

+0

的'image'属性未定义... –

+1

展开错误在问题导航器中,你会看到:''self.image'未初始化' - 编译器告诉你到底是什么问题。 –

+0

好的,谢谢。 – Martin

回答

2

在你init(sound: String)你不分配任何值的形象。 由于此属性是强制性的,并且没有可选项。

你有两个选择,使酒店可随意:

var image: UIImage? = nil 

或指定一个新的图像对象吧:

init(sound: String) { 
    self.sound = sound 
    self.image = UIImage() 
} 
+0

用我的方法,我想要初始化在这个方法中使用的值: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