二元运算符“==”不能应用于“[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
?
我正在开发一个 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
?