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