Le protocole peut être utilisé uniquement comme une contrainte générique
J'ai un MapViewController pour la présentation des annotations sur la carte. Il contient un
objet de type MapPresentable.
protocol MapPresentable {
associatedtype AnnotationElement: MKAnnotation
var annotations: [AnnotationElement] { get }
}
class MapViewController<M: MapPresentable>: UIViewController {
var mapPresentable: M!
}
MapViewController peut également présenter de l'itinéraire sur la carte en cas de mapPresentable
est conforme à RoutePresentable protocole.
protocol RoutePresentable: MapPresentable {
var getRouteLocations: [CLLocation] { get }
}
Mais lors de la vérification faite à l'intérieur de MapViewController
if let routePresentable = mapPresentable as? RoutePresentable {
showRoute(routePresentable.getRouteLocations)
}
J'ai eu cette Erreur:
Protocol 'RoutePresentable' can only be used as a generic constraint because it has Self or associated type requirements
OriginalL'auteur GeRyCh | 2016-10-30
Vous devez vous connecter pour publier un commentaire.
Mis à jour
Désolé, je fais des erreurs. Mais il n'y a aucun moyen de jeter un protocole avec
associated type
.Espère que cela aidera.
Que je connus le
routePresentable.getRouteLocations
n'a rien à voir avec le protocoleMapPresentable
.De sorte que vous pouvez diviser
RoutePresentable
à deux protocole:Original
Parce que
routePresentable.annotations
'de Type s est vide,Vous pouvez simplement supprimer
associatedtype AnnotationElement: MKAnnotation
.Ou utilisateur générique struct place:
Super! Votre mise à jour a permis de résoudre le casting de problème! Merci!!!!
OriginalL'auteur beeth0ven