Двоичный оператор '==' нельзя применять к двум операндам в операторе if - PullRequest
0 голосов
/ 08 октября 2019

Учитывая следующее struct:

struct Landmark {
    let id: String
    let name: String
    let location: CLLocationCoordinate2D
}

И следующее @State:

@State var landmarks: [Landmark] = [
    Landmark(id: "1", name: "Sydney Harbour Bridge", location: .init(latitude: -33.852222, longitude: 151.210556)),
    Landmark(id: "2", name: "Brooklyn Bridge", location: .init(latitude: 40.706, longitude: -73.997))
]

private func selectNextLandmark() {
    if let selectedLandmark = selectedLandmark, let currentIndex = landmarks.firstIndex(where: { $0 == selectedLandmark }), currentIndex + 1 < landmarks.endIndex {
        self.selectedLandmark = landmarks[currentIndex + 1]
    } else {
        selectedLandmark = landmarks.first
    }
}

Я получаю следующую ошибку в строке if внутри selectNextLandmark:

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

Есть ли проблема с моим Landmark struct илиэто проблема с синтаксисом оператора if?

1 Ответ

3 голосов
/ 08 октября 2019

Сообщение достаточно четкое

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

Структура Landmark должна соответствоватьEquatable протокол для того, чтобы он знал, что означает равенство по отношению к Структуре. Обновите вашу структуру до

struct Landmark: Equatable {
    let id: String
    let name: String
    let location: CLLocationCoordinate2D

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