在结构体中初始化所有存储的属性之前使用“self”

Ana*_*nko 4 struct initialization swift

我想在初始化CurrendData.location后获取其随机值。CurrentData我想出了以下代码:

struct CurrentData {
    var size: (x: Int, y: Int)
    var location: (x: Int, y: Int)
        
    init(size: (x: Int, y: Int)) {
        self.size = size
        self.location = (getRandom(size.x), getRandom(size.y)) //error
    }
    
    private func getRandom (_ value:Int) -> Int {
        return Int.random(in: 0...value-1)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:“在初始化所有存储的属性之前使用了‘self’”。如何解决?

Dáv*_*tor 6

getRandom是一个实例方法,因此它被调用self(但是,Swift 允许您在访问实例方法/属性时省略self)。

如果您希望能够从 调用函数init,则需要将其声明为static方法而不是实例方法。然后,您可以通过写出类型名称 ( CurrentData) 或简单地使用来调用静态方法Self

struct CurrentData {
    var size: (x: Int, y: Int)
    var location: (x: Int, y: Int)
        
    init(size: (x: Int, y: Int)) {
        self.size = size
        self.location = (Self.getRandom(size.x), Self.getRandom(size.y))
    }
    
    private static func getRandom (_ value:Int) -> Int {
        Int.random(in: 0...value-1)
    }
}
Run Code Online (Sandbox Code Playgroud)