Swift remplacer classe func
Il est facile de remplacer une méthode rapide:
class A {
func innerValue() -> Int { return 5 }
func getInnerValue() -> Int { return innerValue() }
}
class B: A {
override func innerValue() -> Int { return 8 }
}
B().getInnerValue() //returns 8
Cependant je ne sais pas comment faire la même chose lorsque je déclare innerValue()
comme statique (à l'aide de la class
mot-clé):
class A {
class func innerValue() -> Int { return 5 }
func getInnerValue() -> Int {
return A.innerValue() //ok for compiler but returns 5 instead of 8
return self.innerValue() //error: 'A' doesn't have a member named 'innerValue'
return innerValue() //error: Use of unresolved identifier 'innerValue'
}
}
class B: A {
override class func innerValue() -> Int { return 8 }
}
B().getInnerValue()
Ainsi est-il possible de Swift?
OriginalL'auteur Nikita Arkhipov | 2015-03-26
Vous devez vous connecter pour publier un commentaire.
De votre commentaire, cela ressemble à ce que vous voulez faire est de se référer à l'instance courante de la classe polymorphically. Si c'est ce que vous voulez, puis de ne pas envoyer la
innerValue()
message àA
; ce qui signifie queA
seulement. Et ne pas l'envoyer àself
, car la façon dont vous avez écrit cela,getInnerValue
est une méthode d'instance, tout ce que vous voulez l'appeler, est une méthode de classe. Envoyer àself.dynamicType
, la classe de l'instance courante.Notez que si
getInnerValue
ont une méthode de classe,self
serait la bonne cible.Dans Swift 3,
self.dynamicType
est devenutype(of: self)
.OriginalL'auteur matt