Sobes.tech
Middle+

Mis on seotud tüüp (associated type)?

sobes.tech AI

Vastus AI-lt

Seotud tüüp (associated type) on asendus (täitja nimi) tüübile, mida tegelikult kasutatakse protokollis. See näitab, et protokoll nõuab teatud tüüpi, kuid ei määra selle nime selgelt enne, kui protokoll võetakse vastu konkreetse tüübi või selle laienduse kaudu.

Eelised:

  • Paindlikkus: võimaldab protokollidel jääda universaalseks, töötades iga tüüpi, mis vastab seotud tüübi nõuetele.
  • Tugev tüübikindlus: kompilaator teab konkreetset tüüpi ajal, vältides vigu ja tagades tüübiturvalisuse.
  • Paranenud loetavus: protokoll selgelt näitab, millise andmetüübiga ta töötab, muutes selle kasutamise ennustatavamaks.

Deklaratsioon toimub võtmesõnaga associatedtype.

Näide:

protocol Container {
    associatedtype Item // Seotud tüüp Item
    var items: [Item] { get set }
    mutating func append(_ item: Item)
}

struct IntContainer: Container {
    // Selge Item tüübi määramine (valikuline, Swift saab selle ise välja arvutada)
    typealias Item = Int
    var items: [Int] = []
    mutating func append(_ item: Int) {
        items.append(item)
    }
}

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

Saab lisada piiranguid seotud tüübile, näiteks nõuda, et see vastaks teisele protokollile:

protocol ComparableContainer {
    associatedtype Element: Comparable // Element peab olema Comparable
    var elements: [Element] { get set }
}