Arrays 在Swift中存储和返回数组的最佳方式是什么
我看了文件()Arrays 在Swift中存储和返回数组的最佳方式是什么,arrays,swift,nsuserdefaults,Arrays,Swift,Nsuserdefaults,我看了文件() Youtube上的所有视频都是关于NSUserdefaults的,我认为这是UserDefaults的旧版本,对吗 任何返回Int数组的方法,我都可以这样做: arr = UserDefaults.standard.array(forKey: "MyArray") as? [Int] ?? [Int]() arr = (UserDefaults.standard.array(forKey: "MyArray") as? [Int])! if let arr = UserDef
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") {
}
或者像这样:
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") {
}
或者像这样:
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
的最佳方法吗数组(forKey:)
的内容是:
- 它是可选的
- 它可能是
nil
- 即使它不是
,在展开时,它也将是一个非类型化数组-一个nil
[Any]
[Any]
转换为某种特定类型的数组,例如[Int]
,这样才有用。但是:
- 如果展开
,您将崩溃nil
- 如果您将事实上不是
的内容向下转换为[Int]
,您将崩溃[Int]
[Int]
,那么面临的挑战是安全地(不崩溃)打开可选数组,并安全地(不崩溃)将生成的数组转换为[Int]
这是您更合理的代码片段(第一个和第三个)的目标。但是你如何“拼写”完成这项任务并没有什么区别。这一切都取决于你想如何继续,如果展开或演员不工作。在这种情况下,做任何能给你带来一致结果的事情
就个人风格而言,我可能会这么说(不是你建议的选项之一):
其优点是,它检查结果是否不是
nil
,并检查结果是否可以展开并向下转换为[Int]
,如果答案是肯定的,则安全地执行此操作。选项2非常糟糕。选项1和3取决于您的需要。两者都是有效的,“区别”在于它们做的事情完全不同。做你想做的事。或者别的什么。编程就是把你的愿望变成计算机语言。这不是从一堆固定选项中挑选。想想你想做什么,然后去做。“我认为这是Userdefaults的旧版本”。。。您可以将UserDefaults
看作是NSUserDefaults
的Swift界面。转到并在Swift和Objective-C之间切换,它只是在UserDefaults
和NSUserDefaults
之间来回跳跃。如果要执行(UserDefaults.standard.array(forKey:“MyArray”)作为?[Int])代码>,您也可以只执行UserDefaults.standard.array(forKey:“MyArray”)即可![Int]
。但是,如果键MyArray
没有任何内容,或者它不是Int
的数组,那么这两者都会崩溃,因此您可能不会这样做。只能使用代码>(在强制转换或展开中)如果您知道它永远不会失败,那么最好的选择是使用第一个选项,即使用条件强制转换与nil合并运算符组合,以便在尚未设置默认值的情况下提供默认值。请注意,Swift是一种类型推断语言,因此您只需在nil合并运算符let arr=UserDefaults.standard.array(forKey:“MyArray”)后面添加一个空数组即可?[Int]??[]
非常感谢,非常感谢。但为了确保我能区分“展开”和“无”,你认为这是正确的吗<代码>如果让myObj=UserDefaults。。。。{}
如果myObj!=nil{}
此检查是否为nil。对吗?是的,尽管你可以做得更多<代码>如果让myObj=UserDefaults。。。。作为?[Int]将一步完成所有操作:它检查结果是否为nil
,并检查是否可以向下转换为[Int]
,并且仅当两者的答案均为是时才继续。这不是你的选择,但我个人会这么做。我会在我的回答中加上这个。