Swift Dictionary [String:String]到NSMutableDictionary?

时间:2015-05-20 15:35:49

标签: swift dictionary sprite-kit nsmutabledictionary

我正在尝试在Dictionary属性[String : String]创建并分配类型SKSpriteNode的Swift userData,这需要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

5 个答案:

答案 0 :(得分:31)

没有内置演员阵容。但是你可以使用NSMutableDictionary的带字典的初始化器:

var foundationDictionary = NSMutableDictionary(dictionary: dictionary)

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您可以尝试替换此行:

var foundationDictionary = dictionary as NSMutableDictionary

使用此代码:

var foundationDictionary = NSMutableDictionary(dictionary: dictionary)

答案 3 :(得分:1)

字典

创建不可变字典

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

创建可变字典

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

将新对添加到词典

dictionary["Item 3"] = "description"

答案 4 :(得分:0)

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

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

的错误

为了防止这个错误,可以转换objective-c类中的对象。

在我的例子中,我将一个 JSON 字符串转换为 swift 字典,并根据我的核心要求将其转换为 NSMutableDictionary 将其传递给目标 c 类。当我尝试更新 Objective C 类中的 NSMutableDictionary 时,这给了我上述错误。

在冲浪并尝试了很多之后,我发现如果我尝试在 Objective-C 类本身的 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>
          ......
     }

应用程序数据.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;
}

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