2017-08-25 9 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

を... –

+1

がエラーを拡大'' self.image 'が初期化されていません ' - コンパイラが問題の内容を正確に伝えます。 –

+0

ああ、ありがとう。 – Martin

答えて

2

init(sound: String)では、イメージに値を割り当てません。 このプロパティは必須であり、オプションではないためです。

あなたは2つのオプションがあり、プロパティはオプションます

var image: UIImage? = nil 

それともに新しいイメージオブジェクトに割り当て: `image`プロパティが定義されていない

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

私のアプローチでは、このメソッドで使用する値を初期化したいと考えていました:fileprivate func randomCards(_ imageData:[UIImage]、soundData:[String]) - > [カード] { var cards = [Card]() 0の中でiのために... let image = Card.init(image:imageData [i]) let sound = Card.init(sound:soundData [i]) cards.append(contentsOf: [画像、Card.init(カード:画像)]) cards.append(contentsOf:[サウンド、Card.init(カード:サウンド)]) } cards.shuffle() リターンカード }私はどのようにしていますソリューションのためにこれを変更するには? – Martin

関連する問題