#swift #collectionview #messagekit
#swift #collectionview #messagekit
Вопрос:
Я хотел бы показать загруженное изображение в ячейке. Я попытался сделать это таким образом:
messages.filter { (mType) -> Bool in
mType.messageId == "(message.id)"
}.first?.kind = .photo(ImageMediaItem(image: UIImage(systemName: "photo")!.withTintColor(UIColor.gray, renderingMode: .automatic)))
где:
var messages = [MessageType]()
но я увидел сообщение, в котором говорилось:
Cannot assign to property: 'kind' is a get-only property
Поэтому я решил добавить сеттер / геттер к этому свойству:
struct Message: MessageType {
var sender: SenderType
var messageId: String = ""
var sentDate: Date
var kind: MessageKind{
get {
return self.kind
}
set (newValue) {
self.kind = newValue
}
}
}
Я использовал такую область для добавления данных в список чатов:
messages.append(Message(sender: message.fromId == selectedContactID ? otherSender! : currentUser!, messageId: "(message.id ?? -1)", sentDate: Date().addingTimeInterval(-8600000), kind: mKind))
но после изменений, упомянутых выше, я увидел такое сообщение:
Extra argument 'kind' in call
Я попытался просмотреть документацию, но мне не удалось найти что-то полезное для моей ситуации. Может быть, кто-нибудь знает, как решить эту проблему?
Ответ №1:
Вам нужно получить индекс объекта, который вам нужно изменить, с помощью struct
if let index = messages.firstIndex(where:{ $0.messageId == "(message.id)" }) {
messages[index].kind = .photo(ImageMediaItem(image: UIImage(systemName: "photo")!.withTintColor(UIColor.gray, renderingMode: .automatic)))
}
и для Extra argument 'kind' in call
вычисляемого свойства не должно быть init в дополнение к этому в вашем случае вам не нужно создавать его computed property
, поскольку вы реализуете то, что уже существует по умолчанию
Комментарии:
1. Итак, я не могу обновить определенную ячейку, в которой уже будет установлен вид внутри моего collectionview?
2. и ваша область кода выдает мне ошибку
Cannot convert value of type 'MessageType' to expected argument type 'Int'
3. добавьте индекс объекта вместо самого объекта в качестве свойства внутри ячейки КСТАТИ, вы также можете делегировать все vc для доступа к массиву
4. Я все еще чего-то не понимаю, я должен изменить свою структуру сообщения? потому что после вставки вашего ответа я получил сообщение о свойстве get only: (
5. измените его на
var kind: MessageKind
илиvar kind: MessageKind?
, если вам нужно отложить инициализацию