在Swift中存储和返回数组的最佳方法是什么

时间:2017-10-04 01:57:27

标签: arrays swift nsuserdefaults

我阅读了文档(The Swift Programming Language)。

Youtube上的所有视频都是NSUserdefaults,我认为这是UserDefaults的旧版本吗?

任何方式返回Int数组,我都可以这样做:

arr = UserDefaults.standard.array(forKey: "MyArray") as? [Int] ?? [Int]()

或者像这样:

arr = (UserDefaults.standard.array(forKey: "MyArray") as? [Int])!

或者像这样:

if let arr = UserDefaults.standard.array(forKey: "MyArray") { 

}

我很困惑,我不确定哪种方式是最好的方式或有什么区别。有人会告诉我返回IntStringBoolAny对象Array数组的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

关于array(forKey:)的事情是:

  • 这是一个可选项。

  • 可能是nil

  • 即使它不是nil,在展开时,它也会是一个无类型数组 - [Any]

必须打开“可选”才能使用。必须将[Any]转换为某些特定类型的数组(例如[Int])才有用。但是:

  • 如果你打开nil,你就会崩溃。

  • 如果您将实际上不是[Int]的内容转换为[Int],则会崩溃。

因此,如果您认为这可能是[Int],则面临的挑战是安全地展开Optional (不会崩溃)并将生成的数组转换为[Int] < em>安全(没有崩溃)。

这是你更明智的片段(第一和第三)的目标。准确地说你是怎么拼写&#34;完成这项任务没有任何区别。这一切都取决于你如何解开,如果展开或演员没有成功。在这种情况下,做任何事都会给你一个连贯的结果。

就个人风格而言,这是我可能会说的(不是你建议的选项之一):

if let arr = UserDefaults.standard.array(forKey: "MyArray") as? [Int] {

优点是它检查结果不是nil并检查它是否可以打开并转换为[Int],并且如果答案是肯定的,安全地这样做,全部在一举一动。