能够在多个视图控制器之间共享数据并以一种利用推荐模式(如MVC)的方式实现这一点似乎对创建优秀应用程序至关重要,但我的问题是这些事情并不清楚对我而言。 我很有道理,这个问题非常密集,但为了清楚起见,我认为你真的需要了解整个问题。
首先我们需要确定模型,视图和控制器正在做什么,这是我将如何描述它们,请告诉我我是否正确:
现在关于他们彼此之间的交互方式,我会说控制器在视图和模型之间,它正在管理视图并可能向模型请求数据。除了从视图接收事件之外,它还可以从模型接收事件,例如,如果控制器向模型询问网络上的特定数据(假设它是否询问特定城市的天气),则获取的数据不会立即可用,而是模型将通知控制器,以便它可以使用收到的数据更新视图。 我是对的吗?
我想知道的第一件事是如果一个对象可以被视为模型,如果它不是在这里检索数据,而是做其他简单的事情例如,与视图无关,是否可以将负责通信和管理蓝牙配件的对象视为模型?将数据发送到云的对象可以视为模型吗?那Tic Tac Toe AI怎么样?
然后,单例实例,当应用程序必须在多个视图之间共享数据时,我经常听到它们,但首先,我从未真正理解为什么在这种情况下有必要使用它们?
然后,这是我在an article of the We Heart Swift website中找到的单身人士。
class Singleton {
struct Static {
static let instance = Singleton()
}
class var sharedInstance: Singleton {
return Static.instance
}
}
Singleton.sharedInstance
问题是,如果我难以找到有关为什么以这种方式编写的更多详细信息,而且最重要的是,单例是否可以使用带参数的初始化程序?如何将属性和方法添加到像这样的单例?什么是Static
结构和sharedInstance
?
我的最后一个问题是,从技术上讲,为什么单身人士能够访问我们在其他地方定义的内容?我的意思是,如果我在AppDelegate中创建一个让我们说Dog
类的实例,如果我想在视图控制器中访问这个特定实例,那么就不可能了,那么如何单身人士能否在引擎盖下做到这一点?
谢谢。
答案 0 :(得分:3)
它与结构中的static
有关。 Static本质上是一个为该类的每个实例保留的类变量,因此当您将共享实例设置为静态时,每次访问它时,即使是另一个Singleton.instance
实例,它也是同一个变量,因为它是静态的。它在各种情况下都存在。但是,Swift还不支持类变量,所以当它变量时,它应该快速替换单例子常见的Struct语法。它与java中的静态变量非常相似。
例如:
class Singleton {
var someVar = 0
struct Static {
static let instance = Singleton()
}
}
创建一个带有变量的单例,并使用以下内容来访问它:
let foo = Singleton.Static.instance
foo.someVar = 11
let bar = Singleton.Static.instance
println(bar.someVar) // Prints 11
正如您所看到的,bar.someVar
从未设置过,这是因为共享实例的变量已设置,因此它会打印11。