2015-06-26 1 views
0

Я в процессе переключения одного из моих проектов из Obj-C в Swift, и у меня возникла проблема при переключении с NSDictionary/NSMutableArray на словарь/массив. Поскольку я хватаю значение за «ключ», я предполагаю, что он вернет тот же массив, на который он указывает, как и в Obj-C, но это не так. Я написал небольшой образец, реплицирующий ошибку. Совет в правильном направлении будет высоко оценен. Заранее спасибоSwift Dictionary возвращает другой объект для одного и того же ключа

var test:[ [String:[String]] ] 

init() { 

test = [ [String:[String]] ]() 

var first:[String] = _arrayForKey("key") 
first.append("first") 

var second:[String] = _arrayForKey("key") 
second.append("second") 

var third:[String] = _arrayForKey("key") 
third.append("third") 

var fourth:[String] = _arrayForKey("key") 
fourth.append("fourth") 

println(work) 
} 

private func _arrayForKey(key:String) -> [String] { 

for dict in test { 
    if dict.keys.first! == key { 
     return dict[key]! 
    } 
} 

test.append([key:[String]()]) 
var dict:[String:[String]] = test.last! 

println("MAKING A NEW DICTIONARY \(test)") 
return dict[key]! 
} 

Когда бежал он выходит из [ «четвёртое»], что я смотрю на это [ «первый», «второй», «третий», «четвёртое»]

ответ

0

Это не ошибка.

В отличии от Objective-C, где NSArray и NSDictionary ссылочных типов, массив и словарь в Swift являются типами значений, например

var array1 = [1, 2, 3] 
var array2 = array1 // array is copied 
array1[2] = 4 
println(array1) // -> [1, 2, 4] 
println(array2) // -> [1, 2, 3] 
Смежные вопросы