Палуба Загрузчик


Это моя структура:

fileprivate struct DownloadDeck: Equatable{
    let uid: Int
    var publicOnly: Bool
    static func ==(lhs: DownloadDeck, rhs: DownloadDeck) -> Bool {
        return lhs.uid == rhs.uid
    }
}

Я хочу скачать колоду (60 карт) если publicOnly если ложные, и 8 карт если publicOnly верно. Теперь у меня есть два массива downloadDecks:

var downloadDecks = [DownloadDeck]()
var uniqueDownloadDecks = [DownloadDeck]()

downloadDecks заполнен так:

for deck in Engine.engineDeck.allDecks{
    downloadDecks.append(DownloadDeck(uid: deck.uid, publicOnly: !deck.availableForFree))
}

for deck in CurrentUser.ownedCards{
    downloadDecks.append(DownloadDeck(uid: deck.uid, publicOnly: false))
}

Теперь колода может происходить несколько раз в downloadDecks с таким же uid. Я хочу, чтобы отфильтровать повторяющиеся идентификаторы, и если publicOnly ложно в одном из дублей, publicOnly должно быть установлено в false уникальной колоды. Это мой код для этого:

for deck in downloadDecks{
    if let existingDeck = uniqueDownloadDecks.first(where: {$0 == deck}){
        var mutableExistingDeck = existingDeck
        if existingDeck.publicOnly && !deck.publicOnly{
            mutableExistingDeck.publicOnly = false
        }
    }else{
        uniqueDownloadDecks.append(deck)
    }
}

Теперь у меня есть два массива, который содержит те же данные. Есть ли лучший способ сделать это?



108
3
задан 31 марта 2018 в 11:03 Источник Поделиться
Комментарии