我正在尝试在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
答案 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;
}
我希望这会帮助某人并节省一些时间。