【问题标题】:Trying to split array of objects based on a common key of the objects with swift尝试根据对象的公共键快速拆分对象数组
【发布时间】:2014-10-04 12:28:21
【问题描述】:

我完全迷失了 swift。我正在尝试基于公共密钥拆分一组对象(使用 Parse SDK 检索)。 基本上我想做一个 COUNT + GROUP BY,但我找不到使用 Parse SDK 制作 GROUP BY 的方法,所以我试图对对象进行分组并通过代码对它们进行计数。 但首先,我写的东西看起来很糟糕,其次,它甚至无法编译,我不明白为什么。

这是我正在使用的代码

var groupedEntries = [String: [String: AnyObject?]]()

...

let query = PFQuery(className: "Entry")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
   if error == nil {

      var groupingKey: String
      for object in objects {

         groupingKey = object[groupingKey] as String
         if self.groupedEntries[groupingKey] != nil {
            self.groupedEntries[groupingKey]["count"] = self.groupedEntries[groupingKey]["count"] + 1
         } else {
            self.groupedEntries[groupingKey]["count"] = 1
         }
      }
      self.tableView.reloadData()
   }
}

编译器给出以下错误:'String' 不能转换为 'DictionaryIndex'。无论我尝试什么,都会收到与选项或包装相关的错误。

感谢任何可以帮助我的人:)

【问题讨论】:

    标签: ios arrays dictionary swift


    【解决方案1】:

    在使用subscript 时,Dictionary 返回给定值类型的可选项,因此您需要将其解包。您需要使用我使用的额外变量somevar。请参见下面的代码

    var groupedEntries = [String: [String: AnyObject?]]()
    
    @IBAction func changeImage(sender: AnyObject){
        var objects:[AnyObject]!
        var groupingKey: String //= "abc" Intialize before using
        //var countryCode: String   //= "abc" not defined in your code
    
        for object in objects {
    
            groupingKey = object[groupingKey] as String
            if self.groupedEntries[groupingKey] != nil {
                var somevar = self.groupedEntries[groupingKey]!
                somevar["count"] = (somevar["count"]! as Int) + 1
            } else {
                self.groupedEntries[groupingKey] = ["count":1]
            }
        }
    }
    

    我不知道你的逻辑,但这段代码编译得很好。

    【讨论】:

    • 好吧,这个编译,但是在 "else" 语句上生成一个 EXC_BAD_INSTRUCTION 异常(致命错误:在展开可选值时意外发现 nil)。
    • 如果 nil 需要初始化它,你也应该检查 self.groupedEntries[countryCode] 是否为 nil
    • 这是一种改进,但是如果你不使用好的技术,这些东西真的会变得一团糟。学习好的 Json 解析库代码
    • 抱歉使用countryCode 而不是groupingKey。没有看到您的编辑。编辑答案
    • @codester,在 else 子句中,self.groupedEntries[groupingKey] 是由if 建立的nil。我建议首先将其设置为新字典。
    猜你喜欢
    • 1970-01-01
    • 2023-02-26
    • 2020-03-25
    • 1970-01-01
    • 2022-01-18
    • 2015-03-14
    • 2018-11-23
    • 2012-03-05
    • 2021-09-25
    相关资源
    最近更新 更多