Swift: как удалить последний добавленный дубликат - PullRequest
0 голосов
/ 17 июня 2020

Я использую табличное представление, чтобы люди могли оценивать различные элементы с помощью Cosmos. Каждый раз, когда пользователь оценивает элемент, например, производительность, значение будет добавлено в массив:

class RatingItem {

    var key: String?

    var item: String
    var rating: Double

    init?(item: String, rating: Double) {

            // Initialization should fail if there is no name or if the rating is negative.
            // The name must not be empty
            guard !item.isEmpty else {
                return nil
            }

            // The rating must be between 0 and 5 inclusively
            guard (rating >= 0) && (rating <= 7) else {
                return nil
            }

            // Initialize stored properties.
            self.item = item
            self.rating = rating

        }
    var dictValue: [String: Any] {
        let createdAgo = kSecAttrCreationDate

        return ["Rating_Item" : item,
                "Rating_rating": rating,
                "created_ago": createdAgo]
    }
    init?(snapshot: DataSnapshot) {
        guard let dict = snapshot.value as? [String: Any],
        let item = dict["Rating_Item"] as? String,
        let rating = dict["Rating_rating"] as? Double

            else {return nil}

        self.key = snapshot.key
        self.item = item
        self.rating = rating

    }

}

в моей функции cellForRowAt Я добавляю оценки следующим образом:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let rating = ratingStorage[indexPath.row]


        // Fetches the appropriate meal for the data source layout.
        let ratingItemT = ratingItems[indexPath.row]


        let cell = tableView.dequeueReusableCell(withIdentifier: "TeamMemberRatingTableViewCell", for: indexPath) as! TeamMemberRatingTableViewCell

        cell.update(rating)

        cell.itemLabel.text = ratingItemT.item

        cell.cosmos.didFinishTouchingCosmos = { [ weak self] rating in
            self?.ratingStorage[indexPath.row] = rating

                let item = RatingItem(item: ratingItemT.item, rating: rating)
                self!.finalRating.append(item!)
            }




        return cell
    }

}

Проблема с космосом заключается в том, что он передает значения, когда пользователь перестал касаться, что означает, что если он изменит свое решение, например, для творчества, я получу оба рейтинга в моем массиве ->

, например:

Креативность: 6 Креативность: 5

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

Может быть, кто-то может помочь! :)

Спасибо

1 Ответ

1 голос
/ 17 июня 2020

Вы можете проверить, содержит ли finalRating уже элемент рейтинга, и в этом случае изменить рейтинг только для этого элемента, а не добавлять новый, например:

cell.cosmos.didFinishTouchingCosmos = { [ weak self] rating in
    guard let self = self else { return }
    self.ratingStorage[indexPath.row] = rating
    if let existing = self.finalRating.filter ({$0.item == ratingItemT.item}).first {
        existing.rating = rating
    } else {
        let item = RatingItem(item: ratingItemT.item, rating: rating)
        self.finalRating.append(item!)
    }
}
...