Struct не будет соответствовать эквалайзеру, даже если == set - PullRequest
0 голосов
/ 20 октября 2019

Я использую оператор switch, чтобы пройти через кучу MenuItems. Я получаю предупреждение о каждом случае:

Операторская функция '~ =' требует, чтобы 'MenuItem' соответствовал 'Equatable'

Я думал, что знаю, что это за ошибкаимел в виду, но это код для MenuItem:

struct MenuItem {
    let image: UIImage
    let title: String
    let body: String
    let storyboardName: String
    let storyboardID: String
    let landingItems: [LandingItem]

    static func == (lhs: MenuItem, rhs: MenuItem) -> Bool {
        return lhs.storyboardID == rhs.storyboardID
    }
}


struct LandingItem {
    let image: UIImage
    let title: String
    let body: String
    let storyboardName: String
    let storyboardID: String

    static func == (lhs: LandingItem, rhs: LandingItem) -> Bool {
        return lhs.storyboardID == rhs.storyboardID
    }
}

Есть ли способ сделать MenuItem э-э ... Super Equatable? Или я упускаю что-то действительно очевидное?

1 Ответ

2 голосов
/ 20 октября 2019

Типы безопасности Swift очень строги. Даже если вы внедрите ==, это будет считаться, если вы не заявите о соответствии протоколу Equateable.

struct MenuItem: Equatable {
    let image: UIImage
    let title: String
    let body: String
    let storyboardName: String
    let storyboardID: String
    let landingItems: [LandingItem]

    static func == (lhs: MenuItem, rhs: MenuItem) -> Bool {
        return lhs.storyboardID == rhs.storyboardID
    }
}

struct LandingItem: Equatable {
    let image: UIImage
    let title: String
    let body: String
    let storyboardName: String
    let storyboardID: String

    static func == (lhs: LandingItem, rhs: LandingItem) -> Bool {
        return lhs.storyboardID == rhs.storyboardID
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...