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]
}
}
Έτσι, τα πρωτόκολλα με συσχετισμένους τύπους είναι ένας τρόπος υλοποίησης γενικών διεπαφών, παρόμοιων με τους γενικούς.