2017-03-21 11 views
-2
ここ

は、私はそこには距離フィールドは、現在、私の辞書にはありませんが、私は辞書に追加し、その値を設定したいと思いますはNSMutableDictionaryスウィフトにフィールドを追加する方法

var villages = [NSDictionary]() 
var bars = [NSMutableDictionary]() 
var allBars = [NSMutableDictionary]() 

(bars[2]).setObject(distanceInMiles, forKey: "Distance" as NSCopying) 
    //And this 
bars[2]["Distance"] = distanceInMiles 

を試みたものです。

私はこのエラーを取得しておいてください。

キャッチされない例外により 'NSInternalInconsistencyException' にアプリを終了、理由: ' - [__ NSCFDictionaryのsetObject:forKey:]:不変オブジェクトに送られた変異法'

ここではどのようにあります私の辞書はレイアウトされています:

[{ 
Latitude = "40.719629"; 
Longitude = "-74.003939"; 
Name = "Macao Trading Co"; 
ObjectID = ayORtpic7H; 
PlaceID = ChIJA9S9jIpZwokRZTF0bHWwXYU; 
}, { 
Latitude = "40.717304"; 
Longitude = "-74.008571"; 
Name = "Bar Cyrk"; 
ObjectID = z7NV2uOmgH; 
PlaceID = ChIJaWlspR9awokRvrKEAoUz3eM; 
}, { 
Latitude = "40.720721"; 
Longitude = "-74.005489"; 
Name = "AOA Bar & Grill"; 
ObjectID = GIst3BLb5X; 
PlaceID = ChIJBYvf3IpZwokRJXbThVSI4jU; 
}] 

私は間違っているのか分かりません。私のバーの辞書は変更可能ですので、なぜ私は変更メソッドを不変オブジェクトエラーに送信し続けるのですか?

+0

http://stackoverflow.com/questions/32739508/nscfdictionary-setobjectforkey-mutating-method-sent-to-immutable-objectあなたのエラーのためにコード。 –

答えて

1

NSDictionaryの代わりにDictionaryを迅速に使用してください。また、変数Dictionaryを宣言している間にtypeを与える必要があります。アレイbarsはそれに少なくとも3つの要素を持っている場合にのみ動作する上記のコードで

var villages = [[String : Any]]() 
var bars = [[String : Any]]() 
var allBars = [[String : Any]]() 

//And this 
bars[2]["Distance"] = distanceInMiles 

bars[2]

はこれを試してみてください。それ以外の場合は、"Array index out of bounds"例外が発生します。

+1

あなたは男です!箱からまっすぐ働いた! – mocode9

0

クラスのViewController:のUIViewController {

var bars = [NSMutableDictionary]() 


override func viewDidLoad() { 
    super.viewDidLoad() 
    demo() 
} 

func demo(){ 

    for _ in stride(from: 0, to: 5, by: 1){ 
     bars.append(addDictionary(Latitude: "40.719629", Longitude: "-74.003939", Name: "Macao Trading Co", ObjectID: "ayORtpic7H", PlaceID: "ChIJA9S9jIpZwokRZTF0bHWwXYU")) 
    } 
    print(bars) 
} 

func addDictionary(Latitude : String? , Longitude : String? , Name : String , ObjectID : String? , PlaceID : String?) -> NSMutableDictionary{ 

    let tempDict = NSMutableDictionary() 
    tempDict["Latitude"] = Latitude 
    tempDict["Longitude"] = Longitude 
    tempDict["Name"] = Name 
    tempDict["ObjectID"] = ObjectID 
    tempDict["PlaceID"] = PlaceID 

    return tempDict 
} 

}

関連する問題