Swift获取结构工作在我的第一个视图控制器?

我正在进入使用结构,现在我被困在第一个VC,它工作,因为我期望在另一个VC。 这是我在我的第一个VC(我应该有一个单独的文件中的结构?)

我需要使用lVisitors = ListVisitors.sharedInstance在我的第一个VC(其他VC似乎工作)中填充tableview,

struct ListVisitors{ static var sharedInstance = [Visitor]() static func register() { //NSUserDefaults.standardUserDefaults().registerDefaults( ["tasks" : [String]()]) } static func load() { //Task.tasks = NSUserDefaults.standardUserDefaults().objectForKey("tasks") as! [String] } static func save() { //NSUserDefaults.standardUserDefaults().setObject(Task.tasks, forKey:"tasks") } static func append(visitor : Visitor) { //Task.tasks.append(string) ListVisitors.sharedInstance.append(visitor) } } class ScannerViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AVCaptureMetadataOutputObjectsDelegate { 

现在第一个VC不起作用的部分似乎在另一个VC中起作用

首先VC返回全局0

 let lVisitors = ListVisitors.sharedInstance override func viewDidLoad() { super.viewDidLoad() // global testing self.testPopulateData() print("Global \(lVisitors.count)") 

func testPopulateData将一些testing数据添加到ListVisitors.sharedInstance中

其他VC返回test4

 let lVisitors = ListVisitors.sharedInstance override func viewDidLoad() { super.viewDidLoad() print(" test\(lVisitors.count)") } 

[编辑]在我的第一个VC,在一个func var ListVisitors.sharedInstance似乎有值,像

  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let lVisitors = ListVisitors.sharedInstance //shouldn't have to print("Row Global \(lVisitors.count)") return scannedVisitors.count //other test way } 

[编辑2]我想我想出了一个可行的解决scheme(tx @vadian和@Entalpi)

我将testPopulateData函数添加到我的自定义类中,并将其重命名为load()(将来我想用web服务文件replace它)。 在声明一个实例variables后,在我的第一个VC

 var lVisitors = [Visitor]() 

我在viewDidLoad()中添加了以下内容

 ListVisitors.load() lVisitors = ListVisitors.sharedInstance 

[编辑3]这个类似乎工作,但@vadianbuild议单身人士,那么我如何重写这个类到单身?

 class ListVisitors{ static var sharedInstance = [Visitor]() 

// init(sharedInstance:Visitor){// self.sharedInstance = sharedInstance //}

 static func register() { //NSUserDefaults.standardUserDefaults().registerDefaults( ["tasks" : [String]()]) } static func load() { //Task.tasks = NSUserDefaults.standardUserDefaults().objectForKey("tasks") as! [String] var visitor = Visitor(visitorName: "From Class Matt", visitorCompany: "Google", visitorPlace: "San Diego", visitorPhone: "94888484", visitorEmail: "matt@google.com") sharedInstance = [visitor] visitor = Visitor(visitorName: "From Class John", visitorCompany: "nike", visitorPlace: "New York", visitorPhone: "94888484", visitorEmail: "john@nike.com") // ListVisitors.sharedInstance += [visitor] sharedInstance += [visitor] visitor = Visitor(visitorName: "From Class Troy", visitorCompany: "nike", visitorPlace: "New York", visitorPhone: "94888484", visitorEmail: "troy@nike.com") // ListVisitors.sharedInstance += [visitor] sharedInstance += [visitor] // append visitor = Visitor(visitorName: "From Class Julian", visitorCompany: "leica", visitorPlace: "Tokyo", visitorPhone: "123411234", visitorEmail: "julian@shoot.co.jp") // ListVisitors.append(visitor) sharedInstance.append(visitor) } static func save() { //NSUserDefaults.standardUserDefaults().setObject(Task.tasks, forKey:"tasks") } static func append(visitor : Visitor) { //Task.tasks.append(string) ListVisitors.sharedInstance.append(visitor) } static func delete(index: Int) { ListVisitors.sharedInstance.removeAtIndex(index) print("remove item") } 

}

结构的东西是,它们是价值types,因此当你通过它们时被复制。

你正在改变一个VC的结构副本,而另一个VC坐在另一个副本上,并且看不到第一个VC的结构副本所做的更改。