Как реализовать Hashable структуру для изображения в Swift - PullRequest
1 голос
/ 04 марта 2020

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

struct ChatMessage : Hashable {
    var message: String
    var isMe: Bool
    var avatar: String
}

Работает нормально. Но если я изменяю тип данных аватара на Изображение, то я получаю сообщение об ошибке: "Тип 'ChatMessage' не соответствует протоколу 'Hashable'"

struct ChatMessage : Hashable {
    var message: String
    var isMe: Bool
    var avatar: Image
}

Как включить объект (изображение) в структуре, которая подтверждает Hashable.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

SwiftUI Image является непрозрачной структурой, которая не соответствует протоколу Hashable и не предоставляет никаких свойств, которые можно использовать для пользовательских ha sh, поэтому вы можете либо игнорировать ее в своей модели ha sh (не желательно) или использовать модель таким образом, чтобы некоторая информация об изображении принимала участие в га sh (гораздо предпочтительнее).

Случай а) - игнорирование

struct ChatMessage : Hashable {

    func hash(into hasher: inout Hasher) {
        hasher.combine(message)
        hasher.combine(isMe)
    }

    var message: String
    var isMe: Bool
    var avatar: Image
}

Случай б) - включая

struct ChatMessage : Hashable {

    var message: String
    var isMe: Bool
    var avatarName: String // avatar's name included in hash automatically

    var avatar: Image { // calculable property not used by hashing
       Image(avatarName)
    }
}
0 голосов
/ 04 марта 2020

Вы можете использовать это, например:

struct ChatMessage : Hashable {

    func hash(into hasher: inout Hasher) {
        hasher.combine(UUID())
    }

    var message: String
    var isMe: Bool
    var avatar: Image
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...