Что такое Hashable и Identifiable протоколы?


#1

Я начинающий, объясните пожалуйста простым языком )


#2

Два вопроса.
Вы каждый параметр будете спрашивать?
Курсы смотрели или решили просто начать кодить?
Потому что накопить 1200 руб. и посмотреть курс будет понятнее чем поверхностно его знать. То же и о соседнем вопросе


#3

Swift: Hashable и Identifiable Протоколы

Swift - это язык программирования, который имеет множество встроенных протоколов для использования в приложениях. Два таких протокола - это Hashable и Identifiable. В этой статье мы рассмотрим каждый из них более подробно и предоставим примеры их использования.

Hashable

Протокол Hashable используется для определения уникальности объекта в коллекции. Для того, чтобы тип был совместим с Hashable, он должен реализовать свойство hashValue и функцию операции равенства (==).

Вот пример использования протокола Hashable в Swift:

struct Person: Hashable {
    var name: String
    var age: Int
    var address: String
}

В этом примере мы создали структуру Person, которая реализует протокол Hashable. Для того, чтобы это сделать, мы определили свойство hashValue и функцию операции равенства (==) для структуры Person.

    extension Person {
        var hashValue: Int {
            return name.hashValue ^ age.hashValue ^ address.hashValue
        }

        static func == (lhs: Person, rhs: Person) -> Bool {
            return lhs.name == rhs.name && lhs.age == rhs.age && lhs.address == rhs.address
        }
    }


В этом расширении мы определили свойство hashValue как результат операции исключающего ИЛИ (XOR) для свойств name, age и address. Мы также реализовали функцию операции равенства (==) для сравнения двух объектов типа Person.

 **Identifiable**

Протокол Identifiable используется для идентификации уникального объекта в коллекции. Для того, чтобы тип был совместим с Identifiable, он должен реализовать свойство id.

Вот пример использования протокола Identifiable в Swift:

    struct Animal: Identifiable {
        var id: String
        var name: String
        var age: Int
    }


В этом примере мы создали структуру Animal, которая реализует протокол Identifiable. Для того, чтобы это сделать, мы определили свойство id для структуры Animal.


    let dog = Animal(id: "1", name: "Snoopy", age: 3)
    let cat = Animal(id: "2", name: "Garfield", age: 5)
    let bird = Animal(id: "3", name: "Tweety", age: 1)

    let animals = [dog, cat, bird]



В этом примере мы создали несколько объектов типа Animal с уникальными идентификаторами. Мы также создали массив animals, содержащий эти объекты.

 **Заключение**

Протоколы Hashable и Identifiable могут быть очень полезными для разработчиков Swift, которые работают с коллекциями объектов. Они позволяют определить уникальность и идентичность объектов в коллекции, что облегчает работу с ними. Надеемся, что этот обзор протоколов помог вам лучше понять их применение в Swift.

#4

Ещё вариант реализации протокола Hashable, более универсальный

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

Вместо self лучше подставлять один из параметров объекта. self приходится использовать для энумов.

По реализации протокола Equatable (а static func == это именно Equatable, а не Hashable) достаточно соотносить один параметр (айди :wink: ), а не все - короче как вам удобнее.

Ну и Identifiable реализуется элементарно: параметром
let id = UUID() чтобы самому айдишники не придумывать :wink:


#5

привет)
что за курс за 1200р. ?)