Sobes.tech
Junior — Middle

Ar galima įgyvendinti protokolą naudojant generikus programavimo kalboje?

sobes.tech AI

Atsakymas iš AI

Swift'e galima naudoti generikus kartu su protokolais, tačiau patys protokolai nėra generiniai. Vietoje to, galima kurti protokolus su susijusiais tipais (associated types), kurie leidžia apibrėžti bendrus reikalavimus. Tai leidžia įgyvendinti lankstesnius ir tipų saugius sąsajos.

Pavyzdys protokolo su susijusiu tipu:

protocol Container {
    associatedtype Item
    func append(_ item: Item)
    var count: Int { get }
    subscript(i: Int) -> Item { get }
}

struct IntStack: Container {
    var items = [Int]()
    mutating func append(_ item: Int) {
        items.append(_ item)
    }
    var count: Int {
        return items.count
    }
    subscript(i: Int) -> Int {
        return items[i]
    }
}

Taip, protokolai su susijusiais tipais yra būdas įgyvendinti generines sąsajas, panašias į generikus.