2017-07-01 68 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

回答