Sobes.tech
Middle

Swift'te bir dizide alt tipleri nasıl sınırlandırırsınız?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te, homojen öğe türüne sahip dizilerde alt tipleri doğrudan sınırlamak mümkün değildir. Ancak, benzer davranışı aşağıdaki yaklaşımları kullanarak elde edebilirsiniz:

  1. Protokol Kullanımı: Tüm izin verilen alt tipler için genel bir protokol tanımlayın ve bunu dizi öğesi türü olarak kullanın.

    protocol SpecificType {}
    
    class SubtypeA: SpecificType {}
    class SubtypeB: SpecificType {}
    class AnotherType {}
    
    var specificArray: [SpecificType] = [] // sadece SpecificType uygulayan türleri içeren dizi
    
    specificArray.append(SubtypeA())
    specificArray.append(SubtypeB())
    // specificArray.append(AnotherType()) // Derleme hatası, AnotherType protokolüne uymuyor
    
  2. Protokol Kısıtlamasıyla Generic Kullanımı: Kendi koleksiyonunuzu veya fonksiyonunuzu oluşturuyorsanız, protokol kısıtlamasıyla generic kullanabilirsiniz.

    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>() // sadece SubtypeA içeren dizi
    // var invalidArray = RestrictedArray<AnotherType>() // Derleme hatası, AnotherType protokolüne uymuyor
    
  3. Değişkenli (Enum) ile İlişkili Değerler Kullanımı: Alt tip sayısı sabit ve önceden biliniyorsa, enum kullanabilirsiniz.

    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())) // İç içe geçmiş ilişkili değerde hata
    

Bu nedenle, standart [SomeType] dizisinde alt tipleri doğrudan sınırlamak mümkün değildir. Bunun yerine, protokoller, kısıtlamalı genericler veya enumlar kullanılarak statik tür güvenliği sağlanır.