Sobes.tech
Junior — Middle

Μπορεί να υλοποιηθεί ένα πρωτόκολλο χρησιμοποιώντας γενικούς σε μια γλώσσα προγραμματισμού;

sobes.tech AI

Απάντηση από AI

Στο Swift, μπορείτε να χρησιμοποιήσετε γενικούς μαζί με πρωτόκολλα, αλλά τα πρωτόκολλα από μόνα τους δεν είναι γενικά. Αντ' αυτού, μπορείτε να δημιουργήσετε πρωτόκολλα με συσχετισμένους τύπους (associated types), που επιτρέπουν τον ορισμό γενικών απαιτήσεων. Αυτό επιτρέπει την υλοποίηση ευέλικτων και ασφαλών τύπων διεπαφών.

Παράδειγμα πρωτοκόλλου με συσχετισμένο τύπο:

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

Έτσι, τα πρωτόκολλα με συσχετισμένους τύπους είναι ένας τρόπος υλοποίησης γενικών διεπαφών, παρόμοιων με τους γενικούς.