I have a code like this:
class A {
var a: Int
var clos: () -> () = { [unowned self] in
self.a
}
init(...)
}
Unfortunately, it doesn't compile because it says self is not initialized fully. How would you solve this case?
I have a code like this:
class A {
var a: Int
var clos: () -> () = { [unowned self] in
self.a
}
init(...)
}
Unfortunately, it doesn't compile because it says self is not initialized fully. How would you solve this case?
You can initialized it to something else first, then change it to something that capture self
:
init() {
clos = {}
clos = { [unowned self] in self.a }
}
You can have clos
be implicitly unwrapped optinal if the something else is troublesome to write, but the premise is still the same.
Hi,
You can do:
class A {
var a: Int
lazy var clos: () -> Void = {
return { [unowned self] in
print(self.a)
}
}()
init(a: Int) {
self.a = a
}
}
Edit: The initialization closure is actually not needed, with lazy itself is enough:
class A {
var a: Int
lazy var clos: () -> Void = { [unowned self] in
print(self.a)
}
init(a: Int) {
self.a = a
}
}