swift3 控制器之间的数据传输

Data transfer between swift3 controllers

在图中我根据条目window中的数据库中的用户绘制了菜单。这些入站菜单需要在菜单监控控制器部分发送。两者之间有 SWReveal 库。

如何传输这些数据?

主要故事板图片:

由于您使用的是故事板,因此您的第一个视图控制器可以覆盖 prepareForSegue,这正是它的用途。 调用此方法时会传入一个 UIStoryboardSegue 对象,它包含对目标视图控制器的引用。 在这里,我们可以设置我们想要传递的值。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "MySegueID" {
        if let destination = segue.destinationViewController as? SecondController {
            destination.myInformation = self.myInformation
        }
    }
}

在您的情况下,由于 ATA Uni Obs 不是登录视图控制器的直接子级,因此您首先必须将信息传递给 Reveal View Controller,然后从那里传递给 ATA Uni Obs 视图控制器。

myInformation 是您的视图控制器上的一个 属性 ,其中包含需要从一个视图控制器传递到下一个视图控制器的任何数据。他们显然不必在每个控制器上具有相同的名称。

另一个建议是创建一个数据容器单例:一个在您的应用程序生命周期中仅创建一次并在您的应用程序生命周期内持续存在的对象。

这种方法非常适合这样的情况,即您的应用程序中的全局应用程序数据需要 available/modifiable 跨越不同 类。

这是一篇关于如何实现 Singleton 的好文章 https://medium.com/@chan.henryk/singleton-in-swift-3-4383875a5d4d

第三种不太流行的方法是将数据保存在 UserDefaults 中。请注意,您需要了解可以保存到 UserDefaults 中的类型。 在这里您可以阅读更多关于 UserDefaults 的信息:- http://www.ios-blog.co.uk/tutorials/objective-c/storing-data-with-nsuserdefaults/

这是在 UserDefaults 中设置数据的方法

let defaults = UserDefaults.standard
if defaults.string(forKey: "market") == nil{
    defaults.set("region", forKey: "market")

要从 UserDefaults 中获取数据,您可以执行以下操作

region = defaults.string(forKey: "market")!            

另请查看这个问题,其中更详细地解释了如何在多个视图控制器之间传输数据:- How do you share data between view controllers and other objects in Swift?