Quand j'essaie de conforme la même chose est possible avec objectif-c. P> p> mkannotation code> Protocole IT Three Erreur My Class n'est pas conforme au protocole
mkannotation code>. J'utilise le code suivant
4 Réponses :
Vous devez mettre en œuvre la propriété requise suivante dans les appels:
class MyAnnotation: NSObject, MKAnnotation { var myCoordinate: CLLocationCoordinate2D init(myCoordinate: CLLocationCoordinate2D) { self.myCoordinate = myCoordinate } var coordinate: CLLocationCoordinate2D { return myCoordinate } }
Comme vous avez mentionné, j'ai mis en œuvre une propriété coorditiinge bien que je reçois une erreur. Si vous avez un code de démonstration, veuillez partager. Merci Classe Myannotation: NsObject, Mkannotation {Var Coordonnées: CLLOCATIONCOORDINATION2D {GET}}
Supprimer la coordonnée Var: ... Code> Déclaration au-dessus de la classe
code> Définition. Cela va simplement causer une erreur de compilateur et confondre les gens. C'est aussi une meilleure pratique, du moins dans des exemples, de mettre également en œuvre
titre code> et
sous-titres code> même s'ils sont "facultatifs" (le titre sera presque toujours nécessaire).
Swift, vous devez mettre en œuvre toutes les variables et méthodes non optionnelles d'un protocole afin de se conformer à un protocole. En ce moment, votre classe est vide, ce qui signifie qu'il n'est pas conforme maintenant au protocole code> mkannotation code>. Si vous regardez la déclaration de Vous pouvez voir que si vous implémentez au moins la variable mkannotation code>:
coordonnée code>, alors vous se conformer au protocole. P> p>
Voici une version plus simple:
class CustomAnnotation: NSObject, MKAnnotation { init(coordinate:CLLocationCoordinate2D) { self.coordinate = coordinate super.init() } var coordinate: CLLocationCoordinate2D }
Alternativement (fonctionne dans SWIFT 2.2, Xcode 7.3.1) (Remarque: Swift ne fournit pas de notifications automatiques, donc je jette à moi-même.) -
import MapKit class MyAnnotation: NSObject, MKAnnotation { // MARK: - Required KVO-compliant Property var coordinate: CLLocationCoordinate2D { willSet(newCoordinate) { let notification = NSNotification(name: "MyAnnotationWillSet", object: nil) NSNotificationCenter.defaultCenter().postNotification(notification) } didSet { let notification = NSNotification(name: "MyAnnotationDidSet", object: nil) NSNotificationCenter.defaultCenter().postNotification(notification) } } // MARK: - Required Initializer init(coordinate: CLLocationCoordinate2D) { self.coordinate = coordinate }
merci pour le code d'échantillon. Je soupçonne ma question ici: Stackoverflow.com/questions/39273459/... est liée à KVO. Mais comment la carte peut-elle observer le changement de coordonnée et redessiner l'interface utilisateur?
Consultez ces liens, le même problème Stackoverflow.com/questions/24233873/mkannotation-swift