2017-03-07 14 views
0

깊은 노드가 배열 인 중첩 사전이 있습니다. 사전의 배열 요소에 요소를 추가하려고하면 컴파일 오류가 발생합니다. 내가 시도하고 대체하는 것입니다중첩 된 사전의 배열에 요소를 추가하는 방법

[ "000": "OK"] 키가 동일한 "000"또는 키가 서로 다른 경우, 기존의 요소를 추가하는 경우

[ "001": "좋은"]

같이

. 업데이 트를위한 지침이나 대체 방법을 이해하십시오. 내가 오류는 다음과 같습니다

유형의 불변 값에 돌연변이 멤버를 사용할 수 없습니다 '[[문자열 : 문자열]]'

B = [ "EA" : [ "status": [["000": "OK"]]]] 
B["EA"]?["status"] = [["000": "NOT OK"]] 
print(B) 

(B["EA"]?["status"])?.append(["001":"Good"]) 
+1

의 사용 가능한 복제 [값이 배열에 추가하는 방법 스위프트 사전] (http://stackoverflow.com/questions/28376067/how-to-append-to-an-array-that-is-a-value-in-a-swift-dictionary) – matt

+0

괄호 -'b [ "EA"]? [ "status"]? append ([ "001": "Good"])'. 비록 배열과 내부 사전이 모두 복사된다고 믿기 때문에 이것은 특별히 효율적이지 않습니다. 이것을 피하는 방법은 http://stackoverflow.com/q/41079687/2976878을 참조하십시오. – Hamish

+0

하지만 사전의 배열 값을 사용하는 사전을 사용하면 거의 확실하게 다른 데이터 구조를 사용해야한다는 것을 알 수 있습니다. 사전에 정적 키가 있으면 구조체 여야합니다. – Hamish

답변

1

당신은 그에게 슈퍼맨이 자신에 들어간 같은 방법을 바지 - 한 번에 한 발씩. 배열을 당겨에 추가, 다시 다시 넣어 :

var B = [ "EA" : [ "status": [["000": "OK"]]]] 
B["EA"]?["status"] = [["000": "NOT OK"]] 

print(B) // ["EA": ["status": [["000": "NOT OK"]]]] 

if var arr = B["EA"]?["status"] { 
    arr.append(["001":"Good"]) 
    B["EA"]?["status"] = arr 
} 

print(B) // ["EA": ["status": [["000": "NOT OK"], ["001": "Good"]]]] 
+0

Matt - 명확한 예와 IOS 10에 대한 책을 읽어 주셔서 감사합니다. 나는 항상 나의 답을 찾기위한 첫 걸음으로 노력하고 있습니다. 나는 당신의 책을 더 조심스럽게 읽었어야했지만, 많은 것들이 너무 많아서 계속 지키기가 어렵습니다. –

+0

불행히도 내 "수퍼맨의 바지"농담은 어딘가에 책에있다! 아마 더 좋은 농담이 필요해. – matt

1

을 스위프트 모두 사전 및 배열 구조체 타입이기 때문입니다.
당신은 B의 타입 explicit.Like 할 수 있습니다 : 다음

var B:[String:[String:NSMutableArray]] = [ "EA" : [ "status": [["000": "OK"]]]] 
B["EA"]?["status"] = [["000": "NOT OK"]] 
print(B) 
//["EA": ["status":{ 
// 000 = "NOT OK"; 
// } 
// ]] 

당신이있는 NSMutableArray 방법 추가()를 사용할 수

(B["EA"]?["status"])?.add(["001":"Good"]) 
print(B) 
//["EA": ["status":{ 
// 000 = "NOT OK"; 
// }, 
// { 
// 001 = Good; 
// } 
// ]] 
+0

이것은 매우 유용합니다. 정보 주셔서 감사합니다. –