这不能编译:
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
let fileManager = NSFileManager.defaultManager()
let dir: NSURL? = NSURL.fileURLWithPath("/Users/wilfred/")
var error: NSError? = nil
var folderContents: [NSURL]? = fileManager.contentsOfDirectoryAtURL(dir!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions(), error: &error) as [NSURL]?…但这确实是:
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
let fileManager = NSFileManager.defaultManager()
let dir: NSURL? = NSURL.fileURLWithPath("/Users/wilfred/")
var error: NSError? = nil
var folderContents: [NSURL]? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.folderContents = fileManager.contentsOfDirectoryAtURL(dir!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions(), error: &error) as [NSURL]?
}注意,我只使用了从声明块初始化folderContents的块,并将其复制到viewDidLoad()块。为什么!??!
我得到的错误是:

…这在我看来是假的。
发布于 2015-01-09 16:45:35
属性是在创建self之前初始化的,因此当您想在fileManager中获得folderContents (即self.fileManager )时,self是不存在的,因此您无法获得self的任何属性。例如,如果重写任何类的init方法,在其中放置一个断点,并在属性上设置断点,执行代码,则可以看到属性首先到达,而不是init。
发布于 2015-01-09 12:55:21
在docu的某个地方,有人说在第一种情况下,您需要self:
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
let fileManager = NSFileManager.defaultManager()
let dir: NSURL? = NSURL.fileURLWithPath("/Users/wilfred/")
var error: NSError? = nil
lazy var folderContents: [NSURL]? = self.fileManager.contentsOfDirectoryAtURL(self.dir!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions(), error: &self.error) as [NSURL]?
}https://stackoverflow.com/questions/27860704
复制相似问题