Middle+
İlişkili tür (associated type) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
İlişkili tür (associated type), protokolde kullanılacak olan tür için yer tutucudur (isim yer tutucu). Bu, protokolün belirli bir türün varlığını gerektirdiğini gösterir, ancak bu türü açıkça tanımlamaz; protokol, belirli bir türe benimsetildiğinde veya genişletildiğinde tanımlanır.
Avantajlar:
- Esneklik: Protokollerin, ilişkili türe uygun herhangi bir türle çalışmasını sağlayarak evrensel kalmasını sağlar.
- Güçlü tip denetimi: Derleyici, derleme sırasında belirli türü bilir, bu da hataları önler ve tür güvenliğini sağlar.
- Daha iyi okunabilirlik: Protokol, çalıştığı veri türünü açıkça belirtir, bu da kullanımını daha öngörülebilir kılar.
associatedtype anahtar kelimesiyle tanımlanır.
Örnek:
protocol Container {
associatedtype Item // İlişkili tür Item
var items: [Item] { get set }
mutating func append(_ item: Item)
}
struct IntContainer: Container {
// Açıkça belirtilmiş Item türü (isteğe bağlı, Swift kendisi çıkarabilir)
typealias Item = Int
var items: [Int] = []
mutating func append(_ item: Int) {
items.append(item)
}
}
struct StringContainer: Container {
var items: [String] = [] // Swift, Item = String olduğunu çıkarır
mutating func append(_ item: String) {
items.append(item)
}
}
İlişkili türe kısıtlamalar eklenebilir, örneğin, başka bir protokole uygun olmasını gerektirebilir:
protocol ComparableContainer {
associatedtype Element: Comparable // Element, Comparable olmalı
var elements: [Element] { get set }
}