我想将全局数组(在.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
?
答案 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变量的直接内存。