初始化后,Willset不会保留价值

时间:2017-06-19 16:45:20

标签: swift

您好我有一个使用willset功能的可选变量。由于它是可选的,因此常规集不起作用。在will set中我设置变量,以便在新值为nil时至少初始化它。不幸的是,之后的价值是零,还有什么想法?谢谢

代码:

var arrayOfString: [String]? {
   willSet {
      self.arrayOfString = newValue == nil ? [String]() : newValue
   }
}

2 个答案:

答案 0 :(得分:1)

  

由于它是一个可选的常规集不起作用

不正确。由于它的不是计算属性 set不起作用。

您需要重新阅读有关willSetdidSet的部分。在将任何值写入变量之前,willSet称为。即你写入willSet内变量的任何内容都将被调用你代码的赋值立即覆盖。

如果您指定nil,则会使用nil覆盖您的字符串数组。

通过执行简化

var arrayOfString: [String] = []

答案 1 :(得分:1)

您需要使用didSet

var arrayOfString: [String]? {
    didSet {
        self.arrayOfString = arrayOfString ?? []
    }
}

否则该值会立即被原始值覆盖。

但请注意,如果变量永远不应包含可选项,则应将其声明为:

var arrayOfString: [String]

并且分配应在需要时添加?? []

否则,无论如何,每次访问该值时都必须处理解包。