我开始使用 struct,现在我卡在了第一个 VC 上,它在另一个 VC 中的工作方式与我预期的一样。这是我的第一个 VC 中的内容(我应该在单独的文件中包含结构吗?)
我需要使用 lVisitors = ListVisitors.sharedInstance 在我的第一个 VC 中填充一个 TableView (其他 VC 似乎可以工作)
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 返回 Global 0
let lVisitors = ListVisitors.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
// global testing
self.testPopulateData()
print("Global \(lVisitors.count)")
func testPopulateData 添加一些测试数据到 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] 我想我想出了一个可行的解决方案(tx @vadian 和@Entalpi)
我将 testPopulateData 函数添加到我的自定义类中并将其重命名为 load()(将来我想用 Web 服务文件替换它)。在我的第一个 VC 中声明了一个实例变量之后
var lVisitors = [Visitor]()
我在 viewDidLoad() 中添加了以下内容
ListVisitors.load()
lVisitors = ListVisitors.sharedInstance
[编辑 3] 这个类似乎有效,但@vadian 推荐一个单例,那么我如何将这个类重写成一个单例?
class ListVisitors{
static var 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")
}
最佳答案
结构的特点是它们是值类型,因此在传递它们时会被复制。
您正在一个 VC 中更改结构的一个副本,而另一个 VC 位于不同的副本中,并且看不到对第一个 VC 的结构副本所做的更改。
关于ios - Swift 让结构在我的第一个 View Controller 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34368563/