问题存储/恢复全局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>()