如何在viewcontrollers之间传递变量引用?

时间:2015-10-10 12:24:51

标签: ios swift uiviewcontroller

我正在编写一个带有可自定义调色板的应用程序。我有一个存储这些颜色的设置类(设置),以及一个允许用户修改它们的设置viewcontroller(themeVC),另一个列出可能的值(colorsVC)。

我保留了对两个视图控制器中设置的引用:

let settings = Settings.sharedInstance

在themeVC中,我在表格视图中列出了背景,文字等类别,如下所示:

let cell = tableView.dequeueReusableCellWithIdentifier("right detail with disclosure", forIndexPath: indexPath) as UITableViewCell

switch indexPath.row {

                case 0:
                    cell.textLabel?.text = "Backgrounds"
                    cell.detailTextLabel?.text = settings.backgroundColor.name()

                case 1:

                    ....

                default:
                    cell.textLabel?.text = "Texts"
                    cell.detailTextLabel?.text = settings.textColor.name()
                }
return cell

我正在尝试将设置值传递给colorsVC,但这样只会复制它:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "showColorsViewController") {
            let detailVC = segue.destinationViewController as! ColorsViewController

            detailVC.setting = settings.backgroundColor
        }
    }

ColorsVC允许用户选择一种颜色,然后根据在themeVC中选择的行修改设置中的相应值。

如何为每个单元格传递不同的值,以便接收颜色VC可以读取和修改相应的设置?

我正在寻找类似inout关键字的内容,但遗憾的是我无法在这种情况下使用它。

1 个答案:

答案 0 :(得分:0)

类是引用类型:

  

与值类型不同,引用类型在分配给变量或常量或传递给函数时不会被复制。而不是副本,而是使用对同一现有实例的引用。

在上面的例子中,我认为你最好将detailVC.setting设置为设置,然后直接访问/修改对象上的对象属性,而不是传递类属性的值,这有用吗?

请参阅documentation

中的类是参考类型

修改

我相信你正在使用colorsVC在themeVC上设置一个颜色,所以你选择了colorsVC,选择一种颜色并将其返回到themeVC表格单元格,对吗?

如果是这样,有几种方法可以实现这一点,我认为最好的方法是将单元格的行传递给colorsVC,以便它可以根据需要更新它。