问题存储/恢复全局string数组在swift中
我正在通过一门课程学习迅速。 作为特定项目方法的一部分,我创build了一个名为“tasks”的全局string数组。
import UIKit var tasks = [String]()
我已经满足了这个项目的要求,但是现在我想要做的就是在应用程序的开启/closures之间永久保存这个数组。 迄今为止描述的方法是使用
override func viewDidLoad() { NSUserDefaults.standardUserDefaults().setObject(tasks, forKey: "array") }
这应该保存数组。 当我尝试回忆数组时,问题就出现了。
我在viewDidLoad()里面都试过这两种方法:
tasks = NSUserDefaults.standardUserDefaults().objectForKey("array")! as! NSArray
和
let returnedArray = NSUserDefaults.standardUserDefaults().objectForKey("array")! as! NSArray for i in returnedArray{ tasks.append(returnedArray[i]) }
第一个错误提示“NSArray不能转换为[String]';你的意思是使用”as!“ 强迫低调?“
第二个给出的错误“不能将types'元素'(aka'AnyObject')的值转换为期望的参数types”Int“。
任何人都可以提供一些指导正在发生什么? 我仍然是一个相对的新手(只有2个星期左右),很多文件太密集了,我不明白。
改变第一个
// tasks = NSUserDefaults.standardUserDefaults().objectForKey("array")! as! NSArray tasks = defaults.objectForKey("array") as? [String] ?? [String]()
参考: https : //www.hackingwithswift.com/read/12/2/reading-and-writing-basics-nsuserdefaults
由于数据封装,声明包含可变(集合)types的全局variables不是很好的编程习惯。
就在Swift中,有更好的解决scheme,例如一个静态struct
struct Task { static var tasks = [String]() 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(string : String) { Task.tasks.append(string) } }
在AppDelegate
中尽快调用
Task.register()
当数组从未写入磁盘时定义一个默认值。
方法
Task.load() Task.save()
从/向磁盘读取和写入数组。
将string附加到数组使用
Task.append("Hello") Task.append("World")
并获得价值
print(Task.tasks) // ["Hello", "World"]
静态结构,在任何类之外声明,可以从任何地方访问,并确保数据封装。
您可以通过编写其他函数来扩展结构。 所有函数都需要是静态函数,并由Task.<functionName>()
调用Task.<functionName>()