Sobes.tech
Middle+

Kas yra susijęs tipas (associated type)?

sobes.tech AI

Atsakymas iš AI

Susijęs tipas (associated type) yra vietos žymeklis (pavadinimo užpildas) tipui, kuris iš tikrųjų bus naudojamas protokole. Jis nurodo, kad protokolas reikalauja tam tikro tipo buvimo, tačiau jį aiškiai nenumato iki tol, kol protokolas nebus priimtas konkretaus tipo arba jo išplėtimo metu.

Privalumai:

  • Lankstumas: leidžia protokolams likti universaliems, dirbant su bet kokiu tipu, atitinkančiu susijusio tipo reikalavimus.
  • Stiprus tipų tikrinimas: kompiliatorius žino konkretų tipą kompiliacijos metu, tai užkerta kelią klaidoms ir užtikrina tipų saugumą.
  • Pagerinta skaitomumas: protokolas aiškiai deklaruoja duomenų tipą, su kuriuo dirba, padarydamas jį labiau prognozuojamą.

Jis deklaruojamas naudojant raktinį žodį associatedtype.

Pavyzdys:

protocol Container {
    associatedtype Item // Susijęs tipas Item
    var items: [Item] { get set }
    mutating func append(_ item: Item)
}

struct IntContainer: Container {
    // Aiškus Item tipo nurodymas (pasirinktinai, Swift gali jį išvesti)
    typealias Item = Int
    var items: [Int] = []
    mutating func append(_ item: Int) {
        items.append(item)
    }
}

struct StringContainer: Container {
    var items: [String] = [] // Swift išveda, kad Item = String
    mutating func append(_ item: String) {
        items.append(item)
    }
}

Prie susijusio tipo galima pridėti apribojimus, pavyzdžiui, reikalauti, kad jis atitiktų kitą protokolą:

protocol ComparableContainer {
    associatedtype Element: Comparable // Element turi būti Comparable
    var elements: [Element] { get set }
}