我正在浏览Firefox的开源iOS应用程序,并发现他们有时会在self
的课程中访问属性,有些则没有。
我的猜测是它是一个样式选择,并且使用显式self
清楚地表明它是一个类属性而不是局部变量。但情况并非如此,因为两种方法(w /和self
)都被使用......
令我感到不安的相关代码位于AppDelegate.swift行130到136。财产tabManager
在self
和browserViewController
没有分配,但两者都是同一类的一部分。
self.tabManager = TabManager(prefs: profile.prefs, imageStore: imageStore)
self.tabManager.stateDelegate = self
//[...]
browserViewController = BrowserViewController(profile: self.profile!, tabManager: self.tabManager)
browserViewController.edgesForExtendedLayout = []
由于我对iOS和Swift编程很陌生,如果有人能够澄清这是一种风格选择还是别的什么,我将不胜感激:)
答案 0 :(得分:2)
我的猜测是它是一种风格选择,并且使用显式自我清楚地表明它是一个类属性而不是局部变量。
正确。如果未指定任何邮件收件人,则self
是隐式邮件收件人,因此它相同。 self.tabManager
和tabManager
在此上下文中是同义词(即没有局部变量tabManager
,但有一个实例属性tabManager
)。
但是这种情况不可能,因为两种方法(w /和w / o self)都被使用了......
那被称为"粗心大意" (或者可能"不一致")。在这种情况下不使用self
没有任何惩罚,所以这个程序员有时候不会这样做。
正如我所说in my book,除了错误之外,我从不遗漏self
。但错误确实发生了。即使我做了它们。