Swift 字典 [String:String] 到 NSMutableDictionary?

Swift Dictionary [String:String] to NSMutableDictionary?

我正在尝试在 SKSpriteNode 属性 userData 处创建并分配类型为 [String : String] 的 Swift Dictionary,这需要一个NSMutableDictionary。当我尝试这样做时,出现错误:

'[String : String]' is not convertible to 'NSMutableDictionary'

谁能指出我正确的方向?

    // USER DATA
    var dictionary: [String : String] = Dictionary()
    dictionary["Orbit"] = orbit
    dictionary["Zone"] = zone
    dictionary["Impact"] = impact
    var foundationDictionary = dictionary as NSMutableDictionary
    neoSprite.userData = foundationDictionary

没有内置演员表。但是你可以使用 NSMutableDictionary 的初始化器,它接受一个字典:

var foundationDictionary = NSMutableDictionary(dictionary: dictionary)

你能尝试替换这一行吗:

var foundationDictionary = dictionary as NSMutableDictionary

使用此代码:

var foundationDictionary = NSMutableDictionary(dictionary: dictionary)

上述答案的一个替代答案是将您的字典转换为 NSDictionary,创建它的可变副本并将其转换为 NSMutableDictionary。太复杂了吧?因此我建议从 Dictionary 创建新的 NSMutableDictionary 这只是一个替代方案

var foundationDictionary = (dictionary as NSDictionary).mutableCopy() as! NSMutableDictionary

词典

创建不可变字典

let dictionary = ["Item 1": "description", "Item 2": "description"]

创建可变字典

var dictionary = ["Item 1": "description", "Item 2": "description"]

将新对追加到字典

dictionary["Item 3"] = "description"

我知道我回答这个问题太晚了,一个答案已经被接受,但仍然可以帮助别人。

有时将 swift 字典([String : String] 或 [AnyHashable : String] 或任何其他)转换为 Objective-C NSMutableDictionary,如果其中有一些嵌套对象,如数组或字典不可变,因为更新值时会出现 [NSDictionaryI setObject:forKey:]: unrecognised selector sent to instance

错误

为防止此错误,可以转换 objective-c class.

中的对象

在我的例子中,我将 JSON 字符串转换为 swift 字典,并根据我的核心要求将其转换为 NSMutableDictionary 并将其传递给 objective c class。当我尝试更新 Objective C class.

中的 NSMutableDictionary 时,这给了我一个上述错误

在网上冲浪并尝试了很多之后,我发现如果我尝试在 Objective-C class 本身的 NSMutableDictionary 中转换我的 JSON 字符串而不是它对我有用。

所以试试这个:在 aVC.swift

let Str: String = nsmanagedobject.value(forKey: "<key>") as? String {
     if let mutableDict: NSMutableDictionary = ApplicationData.convertJsonObject(fromJsonString: Str) as? NSMutableDictionary {
          ......
          <Your code to pass NSMutableDictionary to respected Objective-C class>
          ......
     }

ApplicationData.h

+ (NSObject *)convertJsonObjectFromJsonString:(NSString *)jsonString;

ApplicationData.m

+ (NSObject *)convertJsonObjectFromJsonString:(NSString *)jsonString {
    NSObject *jsonObject = nil;
    if ([jsonString length] > 0) {
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
        }
    }
    NSLog(@"jsonObject: %@",jsonObject);
    return jsonObject;
}

我希望这对某人有所帮助并节省一些时间。