Sobes.tech
Middle

Swift-də massivdə alt tipləri necə məhdudlaşdırmaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də, eyni növ elementlərə malik massivlərdə alt tipləri birbaşa məhdudlaşdırmaq mümkün deyil. Ancaq, aşağıdakı yanaşmaları istifadə edərək oxşar davranış əldə etmək mümkündür:

  1. Protokolların istifadəsi: Bütün icazə verilmiş alt tiplər üçün ümumi bir protokol təyin edin və onu massiv elementlərinin tipi kimi istifadə edin.

    protocol SpecificType {}
    
    class SubtypeA: SpecificType {}
    class SubtypeB: SpecificType {}
    class AnotherType {}
    
    var specificArray: [SpecificType] = [] // Yalnız SpecificType-ə uyğun tipləri ehtiva edən massiv
    
    specificArray.append(SubtypeA())
    specificArray.append(SubtypeB())
    // specificArray.append(AnotherType()) // Kompilyasiya xətası, AnotherType protokola uyğun deyil
    
  2. Protokol məhdudiyyəti ilə generiklərin istifadəsi: Öz kolleksiyanızı və ya funksiyanızı yaradırsınızsa, protokol məhdudiyyəti ilə generiklərdən istifadə edə bilərsiniz.

    struct RestrictedArray<T: SpecificType> {
        private var elements: [T] = []
    
        mutating func append(_ element: T) {
            elements.append(element)
        }
    
        func getElements() -> [T] {
            return elements
        }
    }
    
    // var validArray = RestrictedArray<SubtypeA>() // Yalnız SubtypeA-ya uyğun massiv
    // var invalidArray = RestrictedArray<AnotherType>() // Kompilyasiya xətası, AnotherType protokola uyğun deyil
    
  3. Enum ilə işləmə (birlikdə dəyər ilə): Əgər alt tiplərin sayı sabit və əvvəlcədən məlumdursa, enum istifadə edə bilərsiniz.

    enum AllowedSubtypes {
        case typeA(SubtypeA)
        case typeB(SubtypeB)
    }
    
    class SubtypeA {}
    class SubtypeB {}
    
    var enumArray: [AllowedSubtypes] = []
    
    enumArray.append(.typeA(SubtypeA()))
    enumArray.append(.typeB(SubtypeB()))
    // enumArray.append(.typeA(SubtypeB())) // Tip xətası, əlaqəli dəyər daxilində
    

Beləliklə, standart [SomeType] massivində alt tipləri birbaşa məhdudlaşdırmaq mümkün deyil. Əvəzində, protokollar, məhdudiyyətli generiklər və ya enumlar istifadə edilərək statik tip təhlükəsizliyi təmin edilir.