您好我有一个使用willset功能的可选变量。由于它是可选的,因此常规集不起作用。在will set中我设置变量,以便在新值为nil时至少初始化它。不幸的是,之后的价值是零,还有什么想法?谢谢
代码:
var arrayOfString: [String]? {
willSet {
self.arrayOfString = newValue == nil ? [String]() : newValue
}
}
答案 0 :(得分:1)
由于它是一个可选的常规集不起作用
不正确。由于它的不是计算属性 set
不起作用。
您需要重新阅读有关willSet
和didSet
的部分。在将任何值写入变量之前,willSet
称为。即你写入willSet
内变量的任何内容都将被调用你代码的赋值立即覆盖。
如果您指定nil
,则会使用nil
覆盖您的字符串数组。
通过执行简化
var arrayOfString: [String] = []
答案 1 :(得分:1)
您需要使用didSet
:
var arrayOfString: [String]? {
didSet {
self.arrayOfString = arrayOfString ?? []
}
}
否则该值会立即被原始值覆盖。
但请注意,如果变量永远不应包含可选项,则应将其声明为:
var arrayOfString: [String]
并且分配应在需要时添加?? []
。
否则,无论如何,每次访问该值时都必须处理解包。