【问题标题】:Swift Realm - How to COUNT all data from single column?Swift Realm - 如何计算单列中的所有数据?
【发布时间】:2020-02-05 16:59:29
【问题描述】:

这是我的班级的样子:

class Card : Object {
    @objc dynamic var tags: String = ""
    @objc dynamic var set_id: String = ""
}

我想返回所有卡片中的标签数量,并转发set_id
方法如下:

func totalTags() -> String {
        var tagCounter: Int = 0
        let realm = try? Realm()
        let totalCards = realm!.objects(Card.self).filter("set_id = '\(setId)'") //all Cards with selected set_id, set_id is global var.
        for card in 0...totalCards.count {
            //every 'card' has tags, but there there can me more tags,
            //like : tags="one,twitter,world,Europe"...
            //And I want to count all of them for every 'card'
            let result = realm.objects(Card.self).filter() //How to filter?
            tagCounter += //what? result.count or something?
        }
        return String(tagCounter)
    }

【问题讨论】:

  • 您的 for 循环什么也不做,因为您不使用“卡片”实例。显示了您正在实现的实际代码。
  • 这是我的实际代码。我知道有些事什么都不做,所以我在这里发布了一个问题:),你能帮忙吗?
  • 我要在这里开箱即用,但为什么要在标签中存储逗号分隔的字符串?如何在名为let tagList = List<TagClass> 的卡片中创建一个 TagClass 领域对象和一个属性。然后您可以 a) 重用标签 b) 创建从标签返回到 Cards 的链接 c) 答案变得简单;要获取每张卡的标签计数,只需执行 let totalTagsForThisCard = someCard.tagList.count

标签: ios swift database count realm


【解决方案1】:

我了解tags: String 包含逗号分隔的元素,您想查找元素的数量。

您可以通过迭代 totalCards 来做到这一点。对于每个card,将tags 拆分为一个数组并计算元素个数。

for card in totalCards {
    tagCounter += card.tags.components(separatedBy: ",").count
}

components(separatedBy:)documentation

【讨论】:

  • 谢谢你 :) 我只需要在 if card.tags != "" 中添加你的代码,因为标签默认是 ""所以它计数+1
【解决方案2】:

我知道这已经回答了,但我只想分享我自己的方法。

let tagsCount = totalCards.map { $0.tags.components(separatedBy: ",") }.flatMap { $0 }.filter { !$0.isEmpty }.reduce(into: 0, { result, _  in
        result += 1
 })

谢谢。快乐编码:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多