2016-07-14 58 views
0

我正在研究tvOS應用程序,我希望能夠在註釋之間滑動。我將我的註釋存儲在字典中,並將字典存儲在數組中以備將來使用。我只是繪製了加拿大,美國和墨西哥的三個註釋。我希望能夠在這些註釋之間的遙控器上進行滑動。單擊註釋時,它會將您帶到有關該國家的信息。二元運算符'=='不能應用於類型'[MKAnnotation]'和'MKAnnotation'的操作數

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"; 
}] 

當蘋果遙控器swipped,下,例如,我得到的,如果出現以下錯誤條件如下。

二元運算符「==」不能應用於類型的操作數「[MKAnnotation]」和「MKAnnotation」

我如何比較在arrary到一個註解選擇?

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)") 
     } 
    } 
} 

回答

1

由於mapView.selectedAnnotations回報MKAnnotation秒的陣列,即一個[MKAnnotation],它與operator ==與單個MKAnnotation值不起作用。您需要決定如何處理陣列中的多個值 - 具體而言,如果陣列中的任何註釋匹配value,或者當第一個匹配value或全部匹配value時比較是否應該爲真。

如果您需要檢查一個數組元素的值相匹配,您可以使用contains,像這樣:

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

編輯:在使用非閉合contains最初的嘗試已經失敗,因爲MKAnnotation不符合Equatable協議。謝謝,dan,趕上這個!

+0

感謝您的回覆。您的建議將引發以下內容:'無法將'MKAnnotation'類型的值轉換爲期望的參數類型'@noescape(MKAnnotation)throws - > Bool'' –

+0

@PaulS。這很奇怪。你使用的是什麼版本的Swift? – dasblinkenlight

+0

這是因爲包含的非關閉版本要求元素是'MKAnnotation'不是'Equatable'。 – dan

1

1- [MKAnnotation]MKAnnotation的數組,你能注意到區別嗎?

2- let selectedAnnotation = mapView.selectedAnnotations在這裏,你正在存儲所有的註釋不是當前的註釋,你能注意到在這個聲明mapView.selectedAnnotations s?

+1

將.first添加到'let selectedAnnotation = mapView.selectedAnnotations.first'中選擇第一個註釋。將我的比較改爲'let value = locationArray [x]。valueForKey(「註釋」)爲! MKPointAnnotation 如果selectedAnnotation爲! MKPointAnnotation ==值{ '似乎工作。 –

相關問題