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:
-
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 -
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 -
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.