Konform zum Protokoll MKAnnotation via Custom Protocol

Ich möchte einfach 2 oder mehr verschiedene Objekttypen auf eine Karte bekommen. Swift 2.0, ich wollte Protokolle verwenden.

Ich habe ein Protokoll erstellt, dem auch diese Objekte entsprechen müssen. Ich gehe jetzt davon aus, dass jeder Artikel, der PinProtocol entspricht, im Wesentlichen dem einer MKAnnotation entspricht ... nur mehr!

protocol PinProtocol: MKAnnotation {
    // stuff
}

ch habe 2 Klassen, Mitarbeiter und Kund

Beide entsprechen PinProtocol (das dann auch MKAnnotation entsprechen muss)

Ich weiß, dass dies so funktioniert, als ob ich meine Klasse als solche eingerichtet hätte,

class Client: NSObject, PinProtocol {
     //var coordinate:CLLocationCoordinate2D // Leave out get doesn't conform to protocol warning as expected
}

So sagt mir dies, dass PinProtocol wie erwartet funktioniert, da Elemente, die an PinProtocol haften müssen, auch dem MKAnnotation-Protokoll entsprechen. Da die Koordinate: CLLocationCoordinate2D, von MKAnnotation benötigt wird.

So warum bekomme ich dieses Problem mit

let staffAndClients = [PinProtocol]()

mapView.addAnnotations(staffAndClients) // not allowed!
//mapView.addAnnotations(pins as! [MKAnnotation]) // also not allowed

Der Fehler besteht darin, dass der Wert vom Typ [PinProtocol] nicht in das erwartete Argument [MKAnnotation] konvertiert werden kann.

Ist PinProtocol nicht mit MKAnnotation kompatibel, sollte also funktionieren.

Aber dies funktioniert gut

let staff = [Staff]()
mapView.addAnnotations(staff) // no problem
let clients = [Client]()
mapView.addAnnotations(clients) // no problem

Ich kann das Problem mit AnyObject umgehen, aber warum kann ich PinProtocol nicht verwenden - was mir sauberer und die ganze Idee von Protokollerweiterungen vorkommt.

ielen Dank für jede Hilf

Addit ...

Die Art und Weise, wie ich es für diejenigen, die mit einem ähnlichen Problem konfrontiert sind umgehen, ist

var pins = [AnyObject]()
mapView.addAnnotations(pins as! [MKAnnotation])

Antworten auf die Frage(4)

Ihre Antwort auf die Frage