如何持久化附加到全局数组的数据 swift 2

How to persist data that is appended to a global array swift 2

在我开始之前,我只是想说我对应用程序开发总体上还是个新手,我才接触这个领域一个月,所以请尽可能对我进行简单的介绍哈哈。

好的,所以我正在开发一个报价应用程序,所以我创建了一个数组,我可以从任何视图控制器访问它。这将包含 "liked" 引号,这是从另一个视图添加的。

这是我的全局 "likedArray"。它驻留在自己的 swift 文件中。

import Foundation

struct Globals {

    static var likedArray: [String] = ["Touch 'Liked' To Continue..."]

}

通过此方法从另一个视图控制器文件向 likedArray 添加引号。

@IBAction func likedbuttonPressed(sender: AnyObject) {

    Globals.likedArray.append(quoteLabel.text)
}

并且 "liked" 报价通过此方法显示在另一个视图中

// Like button method to move forward in array
@IBAction func likedButtonTouched(sender: AnyObject) {

    self.favouritesLabel.fadeOut(completion: {
        (finished: Bool) -> Void in

    self.currentlikedArrayIndex++
    if self.currentlikedArrayIndex < Globals.likedArray.count {
        self.favouritesLabel.text = Globals.likedArray[self.currentlikedArrayIndex]
    } else {
        self.currentlikedArrayIndex--
    }

     self.favouritesLabel.fadeIn()

    })  
}

这一切都很好,除了当我退出应用程序时,所有喜欢的引语都消失了。

所以,我的问题是如何保存这些数据? 如果您需要有关我的代码的更多信息,请告诉我。提前致谢。

最省事的方法大概就是用NSUserDefaults,可以跟着this tutorial了解具体方法

教程要点:

//for writing to storage
let defaults = NSUserDefaults.standardUserDefaults()
let array = ["Hello", "World"]
defaults.setObject(array, forKey: "SavedArray")

//for reading
let array = defaults.objectForKey("SavedArray") as? [String] ?? [String]()

所以基本上,你应该为你的全局数组创建一个 setter 方法,这样每次设置数组时,它都会写入 NSUserDefaults,然后在应用程序启动时它应该用NSUserDefaults

更新:(我突然想到了)

struct Globals {

    static var likedArray: [String] = ["Touch 'Liked' To Continue..."]

    func addLikedString(likedString: String) {

        self.likedArray.append(likedString)
        NSUserDefaults.standardUserDefaults().setObject(self.likedArray, forKey: "SavedArray")
    }

    func getLikedStringAtIndex(index:Int) -> Int {
        return self.likedArray[index] 
    }

}

//inside your app delegate, or somewhere appropriate, to load the array when the app starts

Globals.likedArray = NSUserDefaults.standardUserDefaults().objectForKey("SavedArray") as? [String] ?? [String]()