【问题标题】:How to save and retrieve Array of Objects value from Dictionary in Swift iOS?如何在 Swift iOS 中从字典中保存和检索对象数组值?
【发布时间】:2017-11-17 05:39:09
【问题描述】:

我刚接触 Swift 编程。我正在开发一个应用程序,其中我需要将一组对象保存到一个字典中,这意味着字典“对象数组”应该是我的值,“ID”应该是我的键。

我的数组中包含 2 个元素,如何使用任何唯一键从字典中保存和检索。请给我建议。谢谢!

【问题讨论】:

    标签: ios iphone dictionary swift3 nsmutablearray


    【解决方案1】:

    你可以这样做

    var myDict = Dictionary<String, Any>()
    myDict = ["myKey": myArrayObjectName as! VideoRangeInfo]
    

    现在您可以使用字典的 "myKey" 访问您的数组,如下所示,

    print("My array = \(myDict["myKey"] as! VideoRangeInfo)")
    

    更新:我认为你的数组是客观的 c NSMutableArray 不是 swift Array 所以

    var myDic = NSMutableDictionary()
    myDic.setObject(myArrayObjectName, forKey: "myKey")
    

    还有

    print("My array = \(myDic.object(forKey: "MyKey") as! VideoRangeInfo)")
    

    【讨论】:

    • 感谢您的回答,我申请并在您的第二行代码中出现错误“线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,”的崩溃。还有警告“从 'NSMutableArray' 转换为无关类型'VideoRangeInfo' 总是“
    • 另一件事@iPatel,当我使用字典通过arrayVideoRange = myDic.object(forKey: self.passingFileID) 获取数组时! NSMutableArray 然后应用程序正在崩溃空字典的 bcos.. 请建议我我在哪里做错了?
    • 添加断点,然后打印你的字典看看日志,它是否为空?
    • 我已经检查过了,字典是 'nil'。 print(myDic.object(forKey: self.passingFileID) as Any))
    • 尝试使用 print(myDic.object(forKey: self.passingFileID) as!NSMutableArray))
    【解决方案2】:

    一种简单的方法是:

    struct VideoRangeInfo {
        var name: String
    }
    
    var arrayVideoRange = [
        VideoRangeInfo(name: "Name1"),
        VideoRangeInfo(name: "Name2"),
        VideoRangeInfo(name: "Name3")
    ]
    
    var dictionary = [String: VideoRangeInfo]()
    for obj in arrayVideoRange {
        dictionary.updateValue(obj, forKey: obj.name)
    }
    
    print(dictionary["Name1"]!)
    print(dictionary["Name2"]!)
    print(dictionary["Name3"]!)
    

    【讨论】:

    • 感谢@Lawrence Tan,我尝试了您的代码,并且它在单个对象数组中运行良好。但是,当我为同一个键保存具有两个对象的数组时,它只为键提供一个对象。基本上我需要为一个键保存多个对象数组。请给我建议。
    • 嗨@user2786,字典的想法是在键唯一的地方存储键对值。如果你想为一个键存储多个对象数组,我能想到的是: ["singleKey": ["array1": array1, "array2": array2] 这是字典中的字典。
    【解决方案3】:

    保存 var dictionary = Int:String

    dictionary.updateValue(value: self.arrangeVideoInfo[0]!, forKey: 1)
    dictionary.updateValue(value: self.arrangeVideoInfo[0]!, forKey: 2)
    

    得到

    let value1 = dictionary[1] as! VideoRangeInfo
    let value2 = dictionary[2] as! VideoRangeInfo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多