Conforme al protocolo MK Anotación a través del protocolo personalizado
Quiero obtener 2 o más tipos de objetos diferentes en un mapa fácilmente. Swift 2.0, quería usar Protocolos.
Creé un protocolo que estos objetos también deben cumplir. Supongo que ahora cualquier elemento que se ajuste a PinProtocol es esencialmente lo mismo que una anotación MK ... ¡solo más!
protocol PinProtocol: MKAnnotation {
// stuff
}
Tengo 2 clases, personal y clientes
Ambos se ajustan a PinProtocol (que también debe ajustarse a MKAnnotation)
Sé que esto funciona como si configurara mi clase como tal,
class Client: NSObject, PinProtocol {
//var coordinate:CLLocationCoordinate2D // Leave out get doesn't conform to protocol warning as expected
}
Entonces, esto me dice que PinProtocol funciona como se esperaba, ya que los elementos que deben adherirse al PinProtocol también se ajustan al protocolo MKAnnotation. Porque coord: CLLocationCoordinate2D, es requerido por MKAnnotation.
Entonces, ¿por qué me sale este problema con
let staffAndClients = [PinProtocol]()
mapView.addAnnotations(staffAndClients) // not allowed!
//mapView.addAnnotations(pins as! [MKAnnotation]) // also not allowed
El error es, no se puede convertir el valor de tipo [PinProtocol] a argumento esperado [MKAnnotation]
¿No se ajusta PinProtocol a MKAnnotation, por lo que debería funcionar?
Pero hacer esto funciona bien
let staff = [Staff]()
mapView.addAnnotations(staff) // no problem
let clients = [Client]()
mapView.addAnnotations(clients) // no problem
Puedo solucionar el problema usando AnyObject, pero ¿por qué no puedo usar PinProtocol? Lo cual me parece más limpio y la idea de las extensiones de protocolo.
Gracias por cualquier ayuda.
Addit ...
La forma en que lo estoy solucionando para aquellos que enfrentan un problema similar es
var pins = [AnyObject]()
mapView.addAnnotations(pins as! [MKAnnotation])