2016-07-15 69 views
1

我想在NSMutableArray內部存儲NSMutableArray。 所以NSMutableArray內部NSMutableArray Swift

var all:NSMutableArray = NSMutableArray() 
let localArray:NSMutableArray = NSMutableArray() 
var i = 0 
for ..........{ 

    /* Add objects to localArray */ 
    localArray.addObject("1\(i)") 
    /* Add localArray to all Array */ 
    all.addObject(localArray) 
    /* Reset the array after adding to `all` array */ 
    localArray.removeAllObjects() 
    i+=1 
} 

結果:變量所有這是的NSMutableArray被複位。

+0

您將'all'中的多個引用添加到一個數組中,並且每次通過循環清空它。嘗試'打印(所有)'當你退出循環,看看發生了什麼。 –

回答

2

不同於Swift的天然陣列(其是struct S和由此值類型),NSMutableArray s爲對象(參照類型)。在將其添加到其他數組後,通過清除可變數組,將清除該對象的唯一副本。

如果移動的localArray的聲明,你的循環裏面,你們每個人都一次通過循環獲取數組的一個新實例,你會實現你正在尋找的行爲:

let all = NSMutableArray() 
var i = 0 
for ..........{ 
    let localArray = NSMutableArray() 

    /* Add objects to localArray */ 
    localArray.addObject("1\(i)") 
    /* Add localArray to all Array */ 
    all.addObject(localArray) 

    i += 1 
} 

注意我已經刪除了清除了localArray的代碼,因爲這不再是必要的,因爲每次循環都會得到一個新數組。

+1

不推薦使用顯式類型,最好使用隱式:'var all = NSMutableArray()'。另外,與NSMutableArray中的Swift數組不同,對象的值不會被修改,所以'all'可以是'let'變量。 –

+0

非常感謝。 –

+0

Thanks @VladimirNul,我對代碼進行了更改。 – vacawama

-1
var all:NSMutableArray = NSMutableArray() 
var i = 0 
for ..........{ 
    let localArray:NSMutableArray = NSMutableArray()  
    /* Add objects to localArray */ 
    localArray.addObject("1\(i)") 
    all.addObject(localArray) 
    localArray.removeAllObjects() /* To reset the array after adding to `all` array*/ 
    i+=1 
} 

但我建議使用夫特陣列

像這樣

var all = Array<Array<Type>>() 
+0

@TestO。不要「重置」內部數組。你在'all'裏面存儲了一個引用,而不是副本。這意味着在存儲引用之後你對它做的任何事情都適用於「全部」內部的內容。 –

+0

非常感謝。 –