假设如下:
class A {
let x : Int
init() {
self.x = assign(1)
}
func assign(y : Int) -> Int {
return y
}
}
这会产生错误。
这是我的问题:有没有办法在类初始化程序中调用函数?
编辑:添加了错误消息:
使用' self'在方法调用'分配'在所有存储的属性初始化之前
答案 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 methods或static
关键字。
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回答。