Dans le guide de programmation Swift d'Apple, il est décrit comment utiliser le mot-clé typealias dans les protocoles (de la section sur Generics)Utilisation de la syntaxe de typealias dans les protocoles dans la bibliothèque standard Swift
protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}
qui est alors mis en œuvre:
struct IntStack: Container {
typealias ItemType = Int // can sometimes be left out and inferred by the compiler
mutating func append(item: Int) {
self.push(item)
}
// redacted
}
Cependant, un cas d'utilisation sensiblement différente se trouve dans le répertoire lib norme Swift, par exemple
public protocol ForwardIndexType : _Incrementable {
typealias Distance : _SignedIntegerType = Int
// redacted
}
ou
public protocol CollectionType : Indexable, SequenceType {
typealias Generator : GeneratorType = IndexingGenerator<Self>
public func generate() -> Self.Generator
// redacted
}
avec:
extension CollectionType where Generator == IndexingGenerator<Self> {
public func generate() -> IndexingGenerator<Self>
}
Qu'est-ce que cette syntaxe représente? Il semble que les typealias soient à la fois déclarées, restreintes (par exemple à GeneratorType) et assignées, à la fois? Qu'est-ce que cela signifie et pourquoi est-ce vrai? Je m'attendais à voir assignation (=) uniquement dans l'implémentation du code client. Ma compréhension de typealias est qu'il représente un type, qui est "rempli" par le code d'implémentation (comme par générique) mais ici il semble implémenter un type pour les typealias dans la déclaration, même si c'est aussi fait dans l'extension (où je m'y attendais).
'typealias X = Z' dans une définition de protocole n'attribue pas un alias. Il définit un type associé 'X' avec la valeur par défaut' Z'. –
@MartinR C'est vrai, j'ai mal formulé ça. Je vais le corriger. Merci! – ColGraff
Étant donné que Generics sont conçus pour être bien, générique ... Je ne suis toujours pas à 100% sur la raison pour laquelle la capacité existe d'avoir une valeur par défaut pour un type associé, mais quand même. – Brynjar