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