className.type没有名为'appDel'的成员

Bas*_*Bas 8 ios swift

我有我的应用代表的参考

let appDel: AppDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate
Run Code Online (Sandbox Code Playgroud)

这工作正常,但下面这行代码给出了一个错误:

let context: NSManagedObjectContext = appDel.managedObjectContext
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

'vctGebruikers.Type' does not have a member named 'appDel'
Run Code Online (Sandbox Code Playgroud)

我在他们的课堂下面宣布他们是这样的:

class vctGebruikers: UIViewController, UITableViewDelegate, UITableViewDataSource {
  let appDel: AppDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate
  let context: NSManagedObjectContext = appDel.managedObjectContext 
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是当我将代码粘贴到viewDidLoad函数中或函数中时,代码才能正常工作.我无法弄清问题是什么.我该如何解决这个错误?

编辑:我还需要访问上下文:

let results: NSArray = context.executeFetchRequest(request, error: nil)
Run Code Online (Sandbox Code Playgroud)

感谢@Antonio,这就是我的工作,但现在我无法访问上下文和appDel

init(coder aDecoder: NSCoder!) {
  let appDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate
  self.appDel = appDelegate
  self.context = appDelegate.managedObjectContext
  super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*nio 0

self在 swift 中,直到所有类属性都已初始化后才能引用。self您在这一行中隐式使用:

let context: NSManagedObjectContext = appDel.managedObjectContext
Run Code Online (Sandbox Code Playgroud)

解决方案是在初始化程序中初始化它们,但使用类似:

let appDelegate = (UIApplication.sharedApplication().delegate) as AppDelegate
self.appDel = appDelegate
self.context = appDelegate.managedObjectContext
Run Code Online (Sandbox Code Playgroud)

另请阅读此处,几天前在 SO 上提出了类似的问题。