二元运算符“==”不能应用于 if 语句中的两个操作数

fuz*_*uzz 2 xcode swift swiftui

鉴于以下情况struct:

struct Landmark {
    let id: String
    let name: String
    let location: CLLocationCoordinate2D
}
Run Code Online (Sandbox Code Playgroud)

以及以下内容@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
    }
}
Run Code Online (Sandbox Code Playgroud)

if我在里面的线路上收到以下错误selectNextLandmark:

运算符函数“==”要求“Landmark”符合“Equatable”

是我的有问题Landmark struct还是语句语法有问题if?

Mal*_*lik 5

消息很明确

运算符函数“==”要求“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
    }
}
Run Code Online (Sandbox Code Playgroud)