二元运算符“==”不能应用于“[MKAnnotation]”类型的操作数和'MKAnnotation'

Binary operator '==' cannot be applied to operands of type '[MKAnnotation]' and 'MKAnnotation'

我正在开发一个 tvOS 应用程序,我希望能够在注释之间滑动。我将注释存储在字典中,并将字典存储在数组中以备将来使用。我只是为加拿大、美国和墨西哥绘制了三个注释。我希望能够在这些注释之间滑动遥控器。单击注释时,您将转至有关该国家/地区的信息。

let countriesArray = ["Canada", "Mexico", "United States of America"]  
var annotationArray = [MKPointAnnotation]()  
var locationDictionary = [String: AnyObject]()  
var locationArray = [AnyObject]()  

三个国家绘制完成后,我的数组如下所示:

locationArray [{  
    annotation = "<MKPointAnnotation: 0x7fc021b01f70>";  
    country = Canada;  
    latitude = "71.47385399229037";  
    longitude = "-96.81064609999999";  
}, {  
    annotation = "<MKPointAnnotation: 0x7fc0219dcf90>";  
    country = "United States of America";  
    latitude = "37.99472997055178";  
    longitude = "-95.85629150000001";  
}, {  
    annotation = "<MKPointAnnotation: 0x7fc02260ff70>";  
    country = Mexico;  
    latitude = "23.94480686844645";  
    longitude = "-102.55803745";  
}]  

例如,当 Apple 遥控器被向下轻扫时,我在下面的 if 条件下收到以下错误。

二元运算符“==”不能应用于“[MKAnnotation]”类型的操作数和'MKAnnotation'

如何将数组中的注释与所选注释进行比较?

func swipedDown(sender:UISwipeGestureRecognizer) {  
    print("Down")  

    let selectedAnnotation = mapView.selectedAnnotations  

    for x in 0 ... locationArray.count - 1 {  

        let value = locationArray[x].valueForKey("annotation") as! MKAnnotation  

        if  selectedAnnotation == value {   //error

            let currentLocation = locationArray[x].valueForKey("country")  

            print("Your on \(currentLocation)")  
        }  
    }  
}  

因为 mapView.selectedAnnotations returns 一个 MKAnnotation 的数组,即 [MKAnnotation],将它与单个 MKAnnotation 值与 operator == 不起作用。您需要决定如何处理数组中的多个值 - 具体来说,当数组中的任何注释匹配 value 或第一个匹配 value 时,比较是否应该为真他们都匹配 value.

如果你需要检查一个数组元素是否匹配值,你可以使用contains,像这样:

if  (selectedAnnotation.contains { [=10=].title == value.title && [=10=].subtitle == value.subtitle }) {
    let currentLocation = locationArray[x].valueForKey("country")  
    print("Your on \(currentLocation)")  
}

编辑: 最初尝试使用非闭包 contains 失败,因为 MKAnnotation 不符合 Equatable 协议。谢谢,dan,赶上这个!

1- [MKAnnotation]MKAnnotation 的一个数组,你能看出区别吗?

2- let selectedAnnotation = mapView.selectedAnnotations 在这里,你存储了所有的注解而不是当前的注解,你能注意到这条语句中的 s mapView.selectedAnnotations ?