【发布时间】:2020-02-26 04:41:21
【问题描述】:
我试图了解声明以下可选数组之间的区别。
问题 1) 在下面的示例中,假设数组附加了一个 nil 值,会发生什么以及哪些变量声明不会崩溃?
问题 2) 类似地假设我们将 String 类型替换为 someObject 类型。如果对象未能正确初始化并返回 nil,会发生什么情况以及哪些变量声明不会崩溃?
我相信 1,2) 的答案是 var 3 和 var 4。 我也认为 var one & var two 如果被初始化 () 可以工作,但我不确定。 我相当肯定 var 5 和 var 6 在尝试附加数组时会崩溃。
问题 3)假设我选择了选项 var one & var two & 他们被初始化为一个空数组,我可以添加 nil/empty objects/strings 吗?
问题 4)假设我选择了选项 var 3 和 var 4,是否建议使用 compactmap 过滤掉 nil 值?
问题 5)假设我选择了选项 var 5 和 var 6,是否建议使用 nil 合并或保护语句检查值以检查 nil/空对象/字符串?
var one : Array<String?> //array containing optional strings
//is the same type as
var two : [String?] //array containing optional strings
var three : Array<String?>? //optional array containing optional strings
//is the same type as
var four : [String?]? //optional array containing optional strings
var five : Array<String>? //optional array containing strings
//is the same type as
var six : [String]? //optional array containing strings
我继承了一个代码库,我在其中接收 json 响应并使用 coddle 协议基于结构模型创建对象。我注意到变量被声明了。
var seven : [someModel]?
型号是
struct someModel {
var a : String?
}
问题 6) 我是否正确假设因为结构的所有属性/属性都是可选的,所以即使 someModel.a = optional(nil),表示结构的对象也可以安全地附加到 var 7 中?
【问题讨论】:
-
Array<T>和[T]完全相同。这样就减少了一半的变体 -
可选数组在语义上通常是空洞的,应该避免使用,除非你真的想区分空数组和 nil。
标签: swift