6
votes

Impossible de conforme du protocole de mkannotation à Swift

Quand j'essaie de conforme mkannotation Protocole IT Three Erreur My Class n'est pas conforme au protocole mkannotation . J'utilise le code suivant xxx

la même chose est possible avec objectif-c.


1 commentaires

Consultez ces liens, le même problème Stackoverflow.com/questions/24233873/mkannotation-swift


4 Réponses :


12
votes

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
    }
}


2 commentaires

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: ... Déclaration au-dessus de la classe 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 et sous-titres même s'ils sont "facultatifs" (le titre sera presque toujours nécessaire).



2
votes

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 mkannotation . Si vous regardez la déclaration de mkannotation : xxx

Vous pouvez voir que si vous implémentez au moins la variable coordonnée , alors vous se conformer au protocole.


0 commentaires

2
votes

Voici une version plus simple:

class CustomAnnotation: NSObject, MKAnnotation {
    init(coordinate:CLLocationCoordinate2D) {
        self.coordinate = coordinate
        super.init()
    }
    var coordinate: CLLocationCoordinate2D
}


0 commentaires

0
votes

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
}


1 commentaires

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?