【问题标题】:Swift Dictionary [String:String] to NSMutableDictionary?Swift 字典 [String:String] 到 NSMutableDictionary?
【发布时间】:2015-05-20 15:35:48
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: swift dictionary sprite-kit nsmutabledictionary


    【解决方案1】:

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

    var foundationDictionary = NSMutableDictionary(dictionary: dictionary)
    

    【讨论】:

    • 非常感谢大家,感谢 Airspeed,比我预期的要简单得多。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以尝试替换此行吗:

      var foundationDictionary = dictionary as NSMutableDictionary
      

      使用此代码:

      var foundationDictionary = NSMutableDictionary(dictionary: dictionary)
      

      【讨论】:

        【解决方案4】:

        字典

        创建不可变字典

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

        创建可变字典

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

        将新对添加到字典中

        dictionary["Item 3"] = "description"
        

        【讨论】:

          【解决方案5】:

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

          有时将 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>
                    ......
               }
          

          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;
          }
          

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

          【讨论】:

            猜你喜欢
            • 2020-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-10
            • 1970-01-01
            相关资源
            最近更新 更多