2017-07-01 41 views
0

我想创建可选的数组,但我想只在将元素添加到之前进行初始化。在willSet中的懒惰初始化问题

所以我写了:

var names: [String]? { 
     willSet { 
      if names == nil { 
       names = [] 
      } 
     } 
    } 

但我得到这个错误:如果你想要一个懒惰吧,那么你应该做这样

Attempting to store to property 'names' within its own willSet, which is about to be overwritten by the new value

+2

我我不确定你的目标是什么。但它看起来像你不希望可选数组永远是零...所以为什么不使它不可选? – Fogmeister

+0

@Fogmeister我只想在初始化数组时使用它,它是可选的,因为它有可能不会在程序中被初始化为 – ULAQ

+0

而不管你想要做什么,并且只关心错误消息:问自己:**当**发生这种错误时?当你试图将'names'的新值设置为到'[“约翰”,“杰克”] ...... ......事件的顺序是怎样的?该序列将是一个*尝试* o设置为'[]',它总是会被覆盖为[“John”,“Jack”],因为您将它写入'willSet' ...意味着它会在它被设置之前发生。 – Honey

回答