2016-03-03 60 views
1

我想要做的是,有一個數組變量,每當它被調用時都會被初始化。爲此,我在聲明它時使用了lazy關鍵字。 但是,我有一個清晰的方法,我想清除數組的內容(在時間複雜度爲的恆定值),對此我沒有對數組執行任何操作。這給了我一個錯誤:Cannot assign a value of type NilLiteralConvertible to a value of type [Int]。我如何解決它?Swift:無法將數組放到零

class Array 
{ 
lazy var elementsInArray = [Int]() 

func add(element: Int) { 
    elementsInArray.append(element) 
} 

func clear() { 
    elementsInArray = nil 
} 
} 
+1

你知道嗎,你的數組不是可選的,所以它不能是零? – TheCodingArt

+1

另外,只需使用removeAll()函數......它就是出於這個確切原因(在這種情況下,對於大多數場景中的性能來說,這絕對是可以忽略的)。 – TheCodingArt

+0

如果你打算進行微觀性能考慮,使數組可選可能會增加每次訪問的開銷。 – Thilo

回答

-1

所以,我也終於怎麼做它的工作是:

class Array { 
    private var _elementsInArray:[Int]? 
    var elementsInArray:[Int]? { 
     get { 
      // If while accessing, this array is nil, initiate it with an empty array 
      if _elementsInArray == nil { 
       _elementsInArray = [Int]() 
      } 
      return _elementsInArray 
     } 
     set { 
      _elementsInArray = newValue 
     } 
    } 

    func add(element: Int) { 
     elementsInArray?.append(element) 
    } 

    func clear() { 
     elementsInArray = nil 
    } 
} 

非常感謝@PrajeetShrestha和@Thilo幫了我。

+0

改爲使用Blakusi的答案。順便說一句,定義類Array並不是最好的想法.... – user3441734

+0

對於可以通過選項或空數組解決的問題過於複雜。 – LopSae

+0

TBH,我只是想學習,如果這是最重要的如何做到這一點。我同意使用removeAll是解決這個簡單問題的最簡單方法。 –

3

沒有爲一個方法:

class Array 
{ 
    lazy var elementsInArray = [Int]() 

    func add(element: Int) { 
     elementsInArray.append(element) 
    } 

    func clear() { 
     elementsInArray.removeAll() //use this. 
    } 
} 
+0

removeAll()在方法的描述中使用'array.capacity'的複雜性。我想要去除複雜性1中的所有元素。任何想法? –

+0

抱歉,不知道該怎麼做。 – JanR

1

要分配任何變量nil應當聲明爲可選的。 Int不同於可選的Int?。類似地[Int]陣列是從可選[Int]?陣列不同

class Array 
{ 
lazy var elementsInArray:[Int]? = [Int]() 

func add(element: Int) { 
    elementsInArray!.append(element) 
} 

func clear() { 
    elementsInArray = nil 
} 
} 

所以,你應該改變它如上述爲nil值分配給在數組元素。

+1

不完全!如果我們寫[Int?]那麼數組允許添加零值,它是[Int]?因此該陣列本身可以是零。 'clear'後面的 –

+1

,'add'現在會出錯 – Thilo

+0

謝謝你。我在做':[Int]?',雖然我沒有意識到我必須用它來明確展開'!'。傻我。 –

5

elementsInArray = []作品以及elementsInArray.removeAll()

這僅僅是分配一個空數組給變量。

+0

這是最好的答案。 – user3441734