Middle+
Mi az azonosított típus (associated type)?
sobes.tech MI
Válasz az MI-től
Az kapcsolt típus (associated type) egy helykitöltő (helyfoglaló név) egy típus számára, amelyet ténylegesen a protokollban használnak. Jelezheti, hogy a protokoll megköveteli egy adott típus jelenlétét, de nem határozza meg explicit módon, amíg a protokollt egy konkrét típus nem fogadja el vagy annak kiterjesztésében.
Előnyei:
- Rugalmasság: Lehetővé teszi, hogy a protokollok általánosak maradjanak, bármilyen megfelelőséggel rendelkező típusokkal dolgozva.
- Erős típusellenőrzés: A fordító a fordítási időben ismeri a konkrét típust, ez megelőzi a hibákat és biztosítja a típusbiztonságot.
- Javított olvashatóság: A protokoll egyértelműen kijelenti az általa kezelt adat típusát, így az könnyebben megjósolható.
A associatedtype kulcsszóval deklarálják.
Példa:
protocol Container {
associatedtype Item // Kapcsolt típus Item
var items: [Item] { get set }
mutating func append(_ item: Item)
}
struct IntContainer: Container {
// Egyértelmű típusmegadás az Item-hez (opcionális, a Swift képes kitalálni)
typealias Item = Int
var items: [Int] = []
mutating func append(_ item: Int) {
items.append(item)
}
}
struct StringContainer: Container {
var items: [String] = [] // A Swift kitalálja, hogy az Item = String
mutating func append(_ item: String) {
items.append(item)
}
}
Kapcsolt típushoz korlátozásokat is hozzá lehet adni, például megkövetelve, hogy megfeleljen egy másik protokollnak:
protocol ComparableContainer {
associatedtype Element: Comparable // Element-nek megfelelnie kell a Comparable protokollnak
var elements: [Element] { get set }
}