Sobes.tech
Junior — Middle

Megvalósítható egy protokoll generikusok használatával egy programozási nyelvben?

sobes.tech MI

Válasz az MI-től

Swiftben generikusokat lehet protokollokkal együtt használni, de a protokollok önmagukban nem generikusak. Ehelyett létrehozhatunk kapcsolt típusokat (associated types) tartalmazó protokollokat, amelyek lehetővé teszik általános követelmények meghatározását. Ez lehetővé teszi rugalmas és típusbiztos interfészek megvalósítását.

Példa egy kapcsolt típusú protokollra:

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]
    }
}

Így a kapcsolt típusokat tartalmazó protokollok egy módja annak, hogy általános interfészeket valósítsunk meg, hasonlóan a generikusokhoz.