当前位置 : 主页 > 手机开发 > 其它 >

swift – 让我们为多个视图控制器创建MVC,Singletons和数据共享,以便初学者清楚

来源:互联网 收集:自由互联 发布时间:2021-06-11
能够在多个视图控制器之间共享数据并以一种利用推荐模式(如MVC)的方式实现这一点似乎对创建优秀应用程序至关重要,但我的问题是这些事情对我来说根本不清楚. 我很有道理,这个问题
能够在多个视图控制器之间共享数据并以一种利用推荐模式(如MVC)的方式实现这一点似乎对创建优秀应用程序至关重要,但我的问题是这些事情对我来说根本不清楚.
我很有道理,这个问题非常密集,但为了清楚起见,我认为你真的需要了解整个问题.

首先,我们需要确定模型,视图和控制器正在做什么,这是我将如何描述它们,请告诉我,如果我是对的:

>模型:负责管理数据的类,仅限于(例如,将在Web上检索信息的类,例如天气预报).
>视图:视图是显示给用户的对象,用户可以经常与其进行交互,即可以在Interface Builder中拖放的对象(例如按钮),也可以从头创建一个或自定义的对象已经存在的子类通过子类化.
>控制器:控制器负责管理视图及其子视图,它接收事件(例如viewDidLoad,甚至当用户点击按钮时)并且可以对其做出反应,例如,它可能会更改标签的文本.

现在关于它们彼此之间的交互方式,我会说控制器在视图和模型之间,它管理视图并可能向模型请求数据.除了从视图接收事件之外,它还可以从模型接收事件,例如,如果控制器向模型询问网络上的特定数据(假设它是否询问特定城市的天气),则获取的数据不会立即可用,而是模型将通知控制器,以便它可以使用收到的数据更新视图.我对吗?

我想知道的第一件事是,如果一个对象可以被认为是一个模型,如果它不是在这里检索数据,而是做其他与视图无关的事情,例如,可能是一个对象负责沟通和管理被视为模型的蓝牙配件?将数据发送到云的对象可以视为模型吗?那个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

问题是,如果我有困难找到关于为什么以这种方式编写的更多细节,最重要的是,单例是否有一个带参数的初始化器?如何将属性和方法添加到像这样的单例?什么是静态结构和sharedInstance?

我的最后一个问题是,从技术上讲,为什么单身人士能够访问我们在其他地方定义的内容?我的意思是,如果我在AppDelegate中创建一个让我们说的Dog类的实例,并且如果我想在视图控制器中访问这个特定的实例,那么就不可能了,那么singleton如何做到这一点可能在引擎盖下?

编辑:哦,是,使用Apple推荐的单身人士?

谢谢.

它与结构中的静态有关. 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.

网友评论