ios - Swift 让结构在我的第一个 View Controller 中工作?

标签 ios struct uiviewcontroller

我开始使用 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/

相关文章:

ios - LibXML2.dylib 与 Xcode6

iphone - 使用 UINavigationController 和默认后退按钮时如何将数据传回父 View ?

iphone - 减少 UIViewController 中 init 和 viewDidLoad 之间的加载时间?

c - C 中的 vector 结构

ios - 在 UiViewController 中使用自定义选项卡显示多个 View

ios - 如何在 ios 7 中更改 UILocalizedIndexedCollat​​ion 的背景颜色

ios - 调整栏按钮大小时出现问题

iOS 8 横向模式无法正常工作,应用程序不旋转

c++ - C++中结构数组的初始化

c++ - 成员访问不完整类型错误: Templatized struct C++