在初始化程序中使用函数 - Swift?

时间:2016-03-25 13:00:55

标签: swift initialization

假设如下:

class A {
    let x : Int
    init() {
        self.x = assign(1)
    }
    func assign(y : Int) -> Int {
        return y
    }
}

这会产生错误。

这是我的问题:有没有办法在类初始化程序中调用函数?

编辑:添加了错误消息:

  

使用' self'在方法调用'分配'在所有存储的属性初始化之前

4 个答案:

答案 0 :(得分:1)

我认为这不是最好的解决方案,但仍然有效。

 class A {
        var variable : Int

        init() {

            self.variable = A.assign(1)

        }

        private class func assign(y : Int) -> Int {
            return y
        }
    }

答案 1 :(得分:1)

在初始化实例之前(init完成之前),您无法调用实例方法,但您可以使用模块级函数,并使用class定义type methodsstatic关键字。

func compute(y: Int) -> Int {
  return y
}

class A {
  let x: Int

  static func assign(y: Int) -> Int {
    return y
  }

  init () {
    x = A.assign(3) + compute(4)
  }
}

答案 2 :(得分:1)

另一个(可能有帮助)选项是让您在初始化程序范围内调用该函数:

class A {
    let x : Int
    init() {
        func assign(y : Int) -> Int {
            return y
        }
        self.x = assign(y: 1)
    }
}

我现在正在一个项目中这样做。我有一个 large 初始化程序(实际上是一个解析器),并使用了一个初始化程序作用域的函数来报告错误。当然,我更希望函数在类范围内,这样我就可以在初始化程序之间重用它。但是至少我可以在每个初始化程序中重用它。

答案 3 :(得分:0)

你可以使用像:

这样的东西
class A {
    var x : Int!
    init() {
        x = assign(1)
    }
    func assign(y : Int) -> Int {
        return y
    }
}

这种方法的缺点是,如果访问x并且未初始化,则会出现运行时错误。查看this回答。