Просто начал смотреть на Свифт в эти выходные. Я создаю id для своего класса, чтобы быстро сравнивать объекты. Я хочу неизменный идентификатор, поэтому должен использовать let.
Использование var и инициализации id для "будет исправлять" использование self в вызове метода до того, как сохраненные свойства будут инициализированы", но затем, конечно, он изменен. Каждый другой вопрос, который я видел похожим на это, касается супер класса/вызова super.init, которого у меня нет. Это очень неприятно, я не знаю, почему это не просто.
class MagicCard {
let id:String
let name: String
let manaCost: Int
let description: String
let attack: Int
let defence: Int
init (name: String, manaCost: Int, description: String, attack: Int, defence: Int) {
self.name = name
self.manaCost = manaCost
self.description = description
self.attack = attack
self.defence = defence
id = generateRandomID()
}
private func generateRandomID() -> String {
let charSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let charSetArray = Array(charSet.characters)
var id:String = ""
for _ in (0..<10) {
id.append(charSetArray[Int(arc4random()) % charSetArray.count])
}
return id
}
}
func == (lhs: MagicCard, rhs: MagicCard) -> Bool {
return lhs.id == rhs.id
}