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

What is the best way to store and return an array in Swift

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

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

return 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") { 

}

我很困惑,我不确定哪种方式是最好的方式或者有什么区别。有人能告诉我 return IntStringBool 数组或 Any 对象 Array 的最佳方法是什么吗?

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

  • 可选。

  • 可能是nil

  • 即使它不是 nil,当展开时,它也将是一个无类型数组 — [Any].

Optional 必须解包才能使用。 [Any] 必须转换为某种特定类型的数组,例如 [Int] 才能有用。但是:

  • 如果你展开nil,你会崩溃。

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

因此,如果您认为这可能是一个 [Int],挑战就是安全地 解包 Optional (不会崩溃)并将结果数组向下转换为 [Int] 安全(不会崩溃)。

这是您更明智的片段(第一个和第三个)的目标。但是,您 "spell" 执行此任务的方式并没有什么不同。如果解包或演员表不起作用,这完全取决于您要如何进行。在这种情况下做任何能给你连贯结果的事情。

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

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

的优点是它检查结果不是 nil 并检查它是否可以解包并向下转换为 [Int],如果答案是肯定的,这样做是安全的,一步到位。