Соответствует протоколу MKAnnotation через пользовательский протокол
Я хочу легко получить 2 или более различных типов объектов на карте. Swift 2.0, я хотел использовать протоколы.
Я создал протокол, которому эти объекты тоже должны соответствовать. Я предполагаю, что теперь любой элемент соответствует PinProtocol, по сути, такой же, как MKAnnotation ... просто больше!
protocol PinProtocol: MKAnnotation {
// stuff
}
У меня есть 2 класса, персонал и клиенты
Оба соответствуют PinProtocol (который также должен соответствовать MKAnnotation)
Я знаю, что это работает так, как будто я настроил свой класс как таковой,
class Client: NSObject, PinProtocol {
//var coordinate:CLLocationCoordinate2D // Leave out get doesn't conform to protocol warning as expected
}
Итак, это говорит мне о том, что PinProtocol работает должным образом, так как элементы, которые должны придерживаться PinProtocol, также соответствуют протоколу MKAnnotation. Потому что координата: CLLocationCoordinate2D, требуется MKAnnotation.
Так почему я получаю эту проблему с
let staffAndClients = [PinProtocol]()
mapView.addAnnotations(staffAndClients) // not allowed!
//mapView.addAnnotations(pins as! [MKAnnotation]) // also not allowed
Ошибка: невозможно преобразовать значение типа [PinProtocol] в ожидаемый аргумент [MKAnnotation]
Разве PinProtocol не соответствует MKAnnotation, поэтому должен работать.
Но это прекрасно работает
let staff = [Staff]()
mapView.addAnnotations(staff) // no problem
let clients = [Client]()
mapView.addAnnotations(clients) // no problem
Я могу обойти проблему, используя AnyObject, но почему я не могу использовать PinProtocol - который мне кажется более чистым и сама идея расширений протокола.
Спасибо за любую помощь.
Addit ...
То, как я обхожу это для тех, кто сталкивается с подобной проблемой,
var pins = [AnyObject]()
mapView.addAnnotations(pins as! [MKAnnotation])