Как я могу изменить 2 коллекции и создать обновленную структуру для обновления UITableView? - PullRequest
0 голосов
/ 23 марта 2019

У меня есть массив данных, смоделированный с использованием Structs и соответствующий как Codable и Equatable

enum FeedItemType: String, Codable {
    case selling = "ITEM_FOR_SALE"
    case facebook = "FACEBOOK_POST"
    case tweet = "TWITTER_POST"
}

enum FeedItemStatus: String, Codable {
    case created = "CREATED"
}

struct FeedItem: Codable, Equatable {
    var item: FeedItemContent
    var liked: Bool
    var commented: Bool

    private enum CodingKeys: String, CodingKey {
        case liked, commented
        case item = "feedItem"
    }

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.item = try container.decode(FeedItemContent.self, forKey: .item)
        self.liked = try container.decode(Bool.self, forKey: .liked)
        self.commented = try container.decode(Bool.self, forKey: .commented)
    }
}

Я перебираю массив этого и заполняю UITableView содержимымиз FeedItemContent, что само по себе также Codable и Equatable.

Поскольку этот список данных разбит на страницы и может обновляться на стороне сервера при получении новых данных, а не перезагружать всю UITableView Iхотелось бы вносить изменения только в строки, которые отличаются, или добавлять новые строки, отсутствующие в исходной коллекции.

Исходя из фона JS, я обычно просто распространяю старый объект и новый объект на новыйпустой объект и пусть React выяснит, что изменилось.

Я не уверен, как этого добиться в Swift / iOS.

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Если вы пытаетесь обновить только релевантные строки в табличном представлении во время извлечения новых данных, используйте Dwifft, так как он очень хорошо вам подойдет.

1 голос
/ 23 марта 2019

Хотя ваш вопрос немного сложен, похоже, вы пытаетесь обновить только соответствующие строки в табличном представлении при получении новых данных.

Существует несколько способов добиться этого с помощью различных алгоритмов различий, однако я сам обычно использую Dwifft , поскольку он специально создан для этой цели, очень быстрый и чрезвычайно легкий.

Dwifft - это небольшая библиотека Swift, которая сообщает вам, что такое "diff" между двумя коллекциями, а именно серией «операций редактирования» Требуется превратить одно в другое. Это также идет с UIKit привязки, чтобы автоматически, оживленно держать UITableView / UICollectionView синхронизируется с частью данных, делая необходимая строка / раздел вставки / удаления вызывает вас в качестве данных меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...