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

在Swift/iOS中声明全局类实例是否常见/正常,ios,swift,global-variables,Ios,Swift,Global Variables,我最近在Lynda.com上看了一个例子,我注意到作者声明了几个全局变量,其中包括两个类实例。我问这个问题的主要原因是因为我听说我们需要尽量避免使用全局变量,除非你真的需要它们。我可以看到对NSUserDefaults'键使用全局变量,但我不确定全局实例 下面是显示全局变量声明的代码。我只关心变量masterView和detailViewController import UIKit var objects:[String] = [String]() var currentIndex:Int

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

下面是显示全局变量声明的代码。我只关心变量
masterView
detailViewController

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?

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

我还没有看到视频,但这可能只是为了学习而使用(例如,在操场上)?在游乐场中,所有不属于闭包(类、结构、函数)的变量本身都是“游乐场全局变量”。通常,我们希望避免全局变量(如您所说),包括类实例。我知道快速演示会使代码更干净,但我不确定展示错误做法是否是个好主意,因为本教程是关于创建
Notes应用程序的,我观看它的主要原因是为了了解在实际应用程序中应如何构造代码。正如你所说,我也注意到他添加的可变变量,我知道这些变量可能会导致问题,但我不确定全局实例是否常见。你知道有哪个教程是按照好的编程模式创建应用程序的吗?@fs_tigre我同意,演示应该努力在可行的地方使用最佳实践。另一方面,制作应用程序结构的演示会非常困难,因为需要太多的部分。我不知道有任何这样的演示或教程。关于我的应用程序的高级结构,对我来说最有用的阅读是苹果的。