Ios 在swift中存储/恢复全局字符串数组时出现问题
我正在学习一门学习swift的课程。作为特定项目方法的一部分,我创建了一个名为“tasks”的全局字符串数组 我已经满足了该项目的要求,但现在我想做的是使该阵列在应用程序打开/关闭之间保持永久性。到目前为止,本课程中描述的方法是Ios 在swift中存储/恢复全局字符串数组时出现问题,ios,arrays,string,swift,Ios,Arrays,String,Swift,我正在学习一门学习swift的课程。作为特定项目方法的一部分,我创建了一个名为“tasks”的全局字符串数组 我已经满足了该项目的要求,但现在我想做的是使该阵列在应用程序打开/关闭之间保持永久性。到目前为止,本课程中描述的方法是 override func viewDidLoad() { NSUserDefaults.standardUserDefaults().setObject(tasks, forKey: "array") } 这将保存阵列。当我尝试调用数组时,问题就出现了 我在
override func viewDidLoad() {
NSUserDefaults.standardUserDefaults().setObject(tasks, forKey: "array")
}
这将保存阵列。当我尝试调用数组时,问题就出现了
我在viewDidLoad()中尝试了这两种方法:
及
第一个错误是“NSArray不能转换为“[String]”;您的意思是使用“as!”强制向下转换吗
第二个错误是“无法将'Element'(又名'AnyObject')类型的值转换为预期的参数类型'Int'
有人能给我一些指导吗?我还是一个相对的新手(只学了大约2周的课程),而且很多文档对我来说太密集了,我还不明白。改变第一个
// tasks = NSUserDefaults.standardUserDefaults().objectForKey("array")! as! NSArray
tasks = defaults.objectForKey("array") as? [String] ?? [String]()
Ref:由于数据封装,声明包含可变(集合)类型的全局变量不是好的编程习惯 就在Swift中,有更好的解决方案,例如静态
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()
从磁盘读取阵列并将阵列写入磁盘
要将字符串附加到数组,请使用
Task.append("Hello")
Task.append("World")
并获取值
print(Task.tasks) // ["Hello", "World"]
在任何类之外声明的静态结构都可以从任何地方访问,并确保数据封装
您可以通过编写附加函数来扩展结构。
所有函数都需要是静态函数,并由
任务调用。(
您好,我已尝试过,但收到错误:“NSArray!”无法转换为“[String]”;你的意思是降级吗?这不再给我错误!但是,它似乎没有存储数组。我会继续处理它!也许你可以尝试我提供的链接。是的,我已经尝试过了。我会继续处理它。:-)我明白了!我在实际添加项时没有更新NSUserDefaults,而是在vie下使用了该函数wDidLoad。它现在运行得很好。谢谢!我很感激它不是一个好的风格,但是我正在遵循/尝试在课程的这一点上保持我应该拥有的知识。我当然会跟踪你的评论,这样我就知道将来如何做了。谢谢你!哈哈!这是一门广受好评的课程,但它只涵盖了基础知识。随着知识库的增长,我完全希望更好地了解正确的“swift”isms:-)我想用其他东西替换nsuserdefaults,因为数据集可以被删除和退出big@alex看看核心Data@vadiantx将在我的简单代码运行后立即执行此操作。您可以在此处查看:
Task.load()
Task.save()
Task.append("Hello")
Task.append("World")
print(Task.tasks) // ["Hello", "World"]