2016-05-14 7 views
0

私はこのようなデータ構造が必要です。辞書の値への参照の取得

var d = ["101": [1: "value1"]] 

内部の辞書を変更する必要があります。私もこれを行うことができます:

func changeIt(inout dict: [Int:String]) { 
    dict[1] = "value2" 
} 

changeIt(&d["101"]!) 

編集を:私は、関数を使用していることを行うことができます

d["101"]![1] = "value3" 

しかし、私は別の関数を呼び出すことなく、この変更をしたいとします。このようなもの。

var sub = &d["101"]! //Does not compile 

sub[1] = "value3" 

これはどうしてですか?

+0

あなたはすでに2つの方法を示しています。あなた自身の質問に完全に答えたので、あなたがこの時点で何を求めているのかは不明です。 – matt

+0

実生活のデータ構造は複雑です。それは配列を含んでいます。私はd [101]![1]のような簡単なアクセスをすることはできません。私は値の参照を取ることを好むでしょう。 – RajV

+0

辞書の参考資料はありません。これは参照型ではなく、値型です。これを行う唯一の方法は、あなたが実証したように 'inout'パラメータを使うことです。 – matt

答えて

1

既に示したように、inoutパラメータを持つ関数を呼び出す以外は、一度の操作では実行できません。それ以外の場合は、Swiftの値型に「参照」を取ることはできません。通常の方法では、一歩ずつ昔ながらの、簡単な方法です:あなたは、内側の辞書を引き出し、それを変更し、再びそれを置く:

let key = "101" 
var d = ["101": [1: "value1"]] 
if var d2 = d[key] { 
    d2[1] = "value2" 
    d[key] = d2 
} 

それはつまらないが、信頼性の高いです。

関連する問題