Sobes.tech
Junior — Middle

Czy można zaimplementować protokół z użyciem generyków w języku programowania?

sobes.tech AI

Odpowiedź od AI

W Swift można używać generyków razem z protokołami, ale same protokoły nie są generyczne. Zamiast tego można tworzyć protokoły z typami powiązanymi (associated types), które pozwalają na określenie ogólnych wymagań. To umożliwia implementację elastycznych i bezpiecznych typów interfejsów.

Przykład protokołu z typem powiązanym:

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

W ten sposób protokoły z typami powiązanymi są sposobem na implementację elastycznych interfejsów, podobnych do generyków.