I've started created a class that extends ARSessionDelegate (more functions to be added later):
class ARKitSessionDelegate: NSObject, ARSessionDelegate {
var frameDidUpdate:(_ frame: ARFrame)->()
init(
frameDidUpdate:@escaping (_ frame: ARFrame)->()
) {
self.frameDidUpdate = frameDidUpdate
}
func session(_ session: ARSession, didUpdate frame: ARFrame) {
frameDidUpdate(frame)
}
}
In my ViewController, I've created a private variable to store this delegate like so:
private var arKitSessionDelegate = ARKitSessionDelegate(frameDidUpdate:{ frame in
print(frame)
}
This all works as expected - whenever a new frame update comes in, my delegate method gets called.
Also in my ViewController, I have a variable declared (that's initialized later):
var model3DNode: SCNNode!
Inside of my delegate creation, I try to access model3DNode like so:
private var arKitSessionDelegate = ARKitSessionDelegate(frameDidUpdate:{ frame in
print(frame)
if model3DNode != nil {
}
})
Obviously, I'm getting an error of Cannot use instance member 'model3DNode' within property initializer; property initializers run before 'self' is available.
I've done some research, and seen possible solutions around this by creating an additional class; which I don't want to do. Is there some other way to access these variables that I'm not thinking of?
I had also tried creating my delegate inside of viewDidLoad, but no frame updates occur if I do that.