在Swift中封装AppDelegate变量

时间:2014-10-11 18:15:51

标签: ios swift encapsulation uiapplication

最近Swift引入了访问修饰符。如何在我的AppDelegate private中设置一些内容?我希望一些ivars是私有的,比如window。但是我不能这样做,因为编译器显示警告我“声明内部类的公共var”并建议窗口属性为internal。 好吧,好吧。我这样做了。但是后来我仍然可以访问该变量,如果我设置:

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
appDelegate.window = nil // <- Accessible

应用程序当然崩溃了。有没有办法为这种东西提供真正的保护?

1 个答案:

答案 0 :(得分:1)

我讨厌成为刚刚发布链接并告诉您阅读它的人,所以我会尽力总结,但如果您真的想要一个非常详细的解释和swift中的访问控制演练,请阅读这篇文章

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html

从该文档开始:&#34;如果您没有自己指定显式访问级别,则代码中的所有实体(具有一些特定的例外情况,如本章后面所述)都具有内部的默认访问级别。因此,在许多情况下,您无需在代码中指定显式访问级别&#34;

所以,除非你有一些不太常见的用例,否则在我看来appdelegate的窗口属性可以很好地使用它生成的访问控制变量。