Swift Realm - Как рассчитать все данные из одного столбца? - PullRequest
0 голосов
/ 05 февраля 2020

Вот как выглядит мой класс:

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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Я знаю, что на этот вопрос уже ответили, но я просто хочу поделиться, как это сделать по-своему.

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

Спасибо. Удачного кодирования :)

0 голосов
/ 05 февраля 2020

Я понимаю, что tags: String содержит элементы, разделенные запятыми, и вы хотите узнать количество элементов.

Вы можете сделать это, перебрав totalCards. Для каждого card разбейте tags на массив и посчитайте количество элементов.

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

components(separatedBy:) документация

...