Sobes.tech
Middle+

Əlaqəli növ (associated type) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Əlaqəli tip (associated type), protokol daxilində faktiki olaraq istifadə olunacaq tip üçün yer tutucusudur (ad doldurucu). Bu, protokolun müəyyən bir tipin mövcudluğunu tələb etdiyini göstərir, lakin onu açıq şəkildə təyin etmir; protokol, konkret bir tip tərəfindən qəbul olunduqda və ya onun genişlənməsində müəyyən edilir.

Üstünlüklər:

  • Çeviklik: Protokolların ümumi qalmasını təmin edir, hər hansı bir uyğun tip ilə işləyərək əlaqəli tələbləri yerinə yetirir.
  • Güclü tip yoxlaması: Kompilyator, tərtib zamanı konkret tipi bilir, bu da səhvləri qarşısını alır və tip təhlükəsizliyini təmin edir.
  • Daha yaxşı oxunaqlıq: Protokol işlədiyi məlumat tipini açıq şəkildə bəyan edir, onu daha proqnozlaşdırıla bilən edir.

associatedtype açar sözü ilə elan edilir.

Nümunə:

protocol Container {
    associatedtype Item // Əlaqəli tip Item
    var items: [Item] { get set }
    mutating func append(_ item: Item)
}

struct IntContainer: Container {
    // Açıq şəkildə göstərilən Item tipi (istəyə bağlı, Swift özü çıxara bilər)
    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 çıxarır
    mutating func append(_ item: String) {
        items.append(item)
    }
}

Əlaqəli tipe məhdudiyyətlər əlavə etmək mümkündür, məsələn, başqa bir protokola uyğun olmasını tələb etmək:

protocol ComparableContainer {
    associatedtype Element: Comparable // Element, Comparable olmalıdır
    var elements: [Element] { get set }
}