在Swift/iOS中声明全局类实例是否常见/可以



我最近在Lynda.com上观看了一个视频教程,我注意到作者声明了一些全局变量,其中包括两个类实例。我提出这个问题的主要原因是,我听说我们需要尽量避免使用全局变量,除非你真的需要它们。我可以看到NSUserDefaults' Keys使用全局变量,但我不确定全局实例。

以下是显示全局变量声明的代码。我只关心变量masterViewdetailViewController

import UIKit
var objects:[String] = [String]()
var currentIndex:Int = 0
var masterView:MasterViewController?
var detailViewController:DetailViewController?
let kNotes:String = "notes"
let BLANK_NOTE:String = "(New Note)"
class MasterViewController: UITableViewController {
     // class code 
}

将类实例声明为全局变量可以吗?

从技术角度来看,在Swift代码中使用全局变量当然是可以的,因为你的程序不会因此而崩溃或"行为不端"。当您为演示构建一个快速示例时,全局变量提供了一种缩短代码的方便方法。

然而,使用可变全局变量也有缺点,这使得它们的使用受到质疑。具体来说,它们破坏了封装。查看您提供的代码,两个变量

var objects:[String] = [String]()
var currentIndex:Int = 0

应该隐藏在模型对象中,您可以对其进行一定程度的控制。

如果不小心清除全局变量,则使用全局变量可能会产生一些意外行为。例如

var masterView:MasterViewController?
var detailViewController:DetailViewController?

可以保留对不再可见的视图控制器的引用。

如果您希望在整个应用程序工作中只使用该类的一个实例,那么可以将类实例声明为全局变量
注意:您可以隐藏这些属性&通过使这些Private,您不希望全局实例变量访问这些函数。

最新更新