J'essaie de comprendre pourquoi Swift applique une classe conforme à un protocole avec un initialiseur à marquer comme requis. Cela impose essentiellement toutes les sous-classes pour implémenter également cet initialiseur. Sûrement l'initialiseur de superclasse désigné serait hérité?Swift: Initialisation du protocole d'implémentation dans une classe
Les citations ci-dessous sont extraites du Guide Langue: Swift https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID272
Vous pouvez mettre en œuvre une exigence d'initialisation de protocole sur une classe conforme soit comme un initialiseur désigné ou un initialiseur de commodité. Dans les deux cas, vous devez marquer la mise en œuvre de initialiseur avec le modificateur requis:
class SomeClass: SomeProtocol {
required init(someParameter: Int) {
// initializer implementation goes here
}
}
class SomeSubclass: SomeClass {
required init(someParameter: Int) { // enforced to implement init again
// initializer implementation goes here
}
}
L'utilisation du modificateur requis assure que vous fournir une implémentation explicite ou héritée de l'exigence de initialiseur sur tous les sous-classes de la classe conforme, de sorte qu'elles soient également conformes au protocole .
EDIT: Je ne l'avais pas d'abord mentionné que je suis actuellement limité à Swift 2.1. Il semble être un problème de compilateur dans cette version et ne se produit pas dans les versions ultérieures.
Cela a beaucoup de sens pour le raisonnement de le marquer comme requis. Je suppose que ce qui m'a découragé était le fait que dans Swift 2.1, le compilateur vous oblige à implémenter l'initialiseur de superclasses même si la sous-classe n'a pas d'initialiseurs désignés. –
Marquer cela comme accepté car il explique ma question "Sûrement l'initiateur désigné de superclasse serait héritée?" Le problème original que j'avais était dû à une limitation de Swift 2.1. –