我阅读了文档(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") {
}
我很困惑,我不确定哪种方式是最好的方式或有什么区别。有人会告诉我返回Int
,String
,Bool
或Any
对象Array
数组的最佳方法是什么。
答案 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]
,并且如果答案是肯定的,安全地这样做,全部在一举一动。