swift 2.0 : use of self in method call before stored properties are initialised

标签 swift swift2 swift-playground

这周末才开始研究 Swift。我正在为我的类(class)创建一个 id 以快速比较对象。我想要一个不可变的 id,所以应该使用 let。

使用 var 并将 id 初始化为 ""将修复 "在初始化存储属性之前在方法调用中使用 self" 但当然它是可变的。我见过的与此类似的所有其他问题都是关于父类(super class)/调用 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
}

最佳答案

我可以建议的一个修补程序是使 generateRandomID 成为一个类 func。所以让它像这样:

private class func generateRandomID() -> String {

然后这样调用:

id = MagicCard.generateRandomID()

关于 swift 2.0 : use of self in method call before stored properties are initialised,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771325/

相关文章:

swift - 检查文本字段实时

swift - 当我设置实例变量时在 `top_level_code` 中访问错误

ios - 使用可选的初始化程序扩展 CollectionType

swift - MacOS Playground : How can change the background color?

ios - 使用默认值初始化 ViewModel

swift - 根据选择在 TableView 中显示/隐藏部分

swift - 使用 UITapGestureRecognizer、UIImageView 和 UITableViewCell 将参数传递给 Swift 中的选择器

generics - 如何在函数内部而不是在签名中使用泛型? [ swift 2]

github - 如何将 Xcode Swift Playground 导入 GitHub?

swift3 - 苹果 Swift 3 中的网页抓取