swift3控制器之间的数据传输

时间:2017-07-31 08:52:41

标签: ios swift xcode8

在图形中,我根据用户从输入窗口中的数据库中绘制了菜单。这些入站菜单需要在菜单监控控制器部分中发送。介于两者之间的SWReveal库。

如何传输此数据?

主要故事板图片:

Main storyboard image

1 个答案:

答案 0 :(得分:0)

由于您使用的是故事板,因此您的第一个视图控制器可以覆盖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不是Login View Controller的直接子项,因此您首先必须将信息传递给Reveal View Controller并从那里传递给ATA Uni Obs视图控制器。

myInformation是视图控制器上的一个属性,用于保存从一个视图控制器传递到下一个视图控制器的任何数据。他们显然不必在每个控制器上使用相同的名称。

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

此方法非常适合您的应用中需要在不同类中提供/修改全局应用数据的情况。

这是一篇关于如何实现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?