将.swift中的全局变量传递给特定的viewController

时间:2015-07-06 09:15:33

标签: ios swift design-patterns global-variables

我想将全局数组(在.swift文件中)传递给特定的ViewController。这是我的代码

commonData.swift

import Foundation

var regionArray:[Bool]?

let region = [
"United States",
"United Kingdom"
]

testTableViewController.swift

import UIKit

var arraySize:Int?
var boolArray:[Bool]?

class testTableViewController: UITableViewController {
    override func viewDidLoad() {
        self.boolArray = regionArray
        self.arraySize = region.count

        if(self.boolArray == nil) {
             self.boolArray = Array(count: self.arraySize!, repeatedValue: false)
             NSLog("Array renewed")
        }
    }
}

即使我多次尝试输入表格视图,regionArray中的 commonData.swift 也会在日志数据中打印出“Array renewed”。如何设置和传递全局变量以加载/制作成特定的viewController

2 个答案:

答案 0 :(得分:1)

我想你写了一个拼写错误:

class testTableViewController: UITableViewController {
    var arraySize:Int?
    var boolArray:[Bool]?
    ...

但无论如何。

首先关闭。 Swift Arrays objects,它们是structs,这意味着您没有通过执行以下操作传递对象操作系统的引用:

self.boolArray = regionArray

您没有将regionArray的引用传递给self.boolArray,而是self.boolArray发生了regionArray的“副本”。

所以当你这样做时:

self.boolArray = Array(count: self.arraySize!, repeatedValue: false)

regionArray并未触及所有只提供self.boolArray值的内容。

要解决此问题,您必须使用self.boolArray更改regionArray或添加:

regionArray = self.boolArray

答案 1 :(得分:0)

我通过设计单例设计模式解决了这个问题。我所做的是

commonData.swift

class mySingletonDesign {
     var regionArray:[Bool]?
     let region = [
         "United States",
         "United Kingdom"
     ]
}

var regionInfo = mySingletonDesign()

和testTableViewController.swift是

import UIKit

class testTableViewController: UITableViewController {
    override func viewDidLoad() {

        if(regionInfo.regionArray == nil) {
             regionInfo.regionArray = Array(count: regionInfo.region.count, repeatedValue: false)
             NSLog("Array renewed")
        }
    }
}

在此代码之后,"阵列更新"没被叫。因为这个调用访问了regionInfo变量的直接内存。