İçeriğe geç

Swift Generics ve İndirect Enum kullanımı

swift

Merhabalar bu yazımda Swift ile Enum yapısını Generics ve İndirect yapıda nasıl kullanırız bunun örneğini vereceğim. Bu sayede daha efektif ve ileri seviye bir kullanım yaratmış olacağız.

Generics yapısından diğer yazımda Bahsetmiştim. Enum yapısı çokca kullanılmakta İOS programlamada kullanılmasıda oldukça kullanışlı, hata yönetimi throw yapısınıda enum protokolü ErrorType ile oluşturmaktayız bu konu hakkındada yazım mevcut.

Aşağıda ilk olarak normal bir enum yapısı örneği vereceğim.

enum genericsEnum {
    
    case success(String)
    case Error(String)
    
}

infix operator <> {associativity left}

func <> (lhs:genericsEnum,rhs:genericsEnum) -> Bool {
    
    switch (lhs,rhs) {
        
    case (genericsEnum.success(let s),genericsEnum.success(let s2)) where s == s2:
        return true
    
    default: return false
    }
    
    
}

genericsEnum.success("200") <> genericsEnum.success("200") // true
genericsEnum.success("200") <> genericsEnum.success("404") // false

Bu örneğimde ise generics yapısını enum üzerinde görebilirsiniz.

enum generic<T:Equatable> {
    case value(T)
}

func getGenericEnum<T>(enu:generic<T>) -> T? {
    if case generic.value(let x) = enu {
        return x
    }
    
    return nil
}

var b = generic<String>.value("K&")
var c = generic<Int>.value(213)
getGenericEnum(c) // 213
getGenericEnum(b) // K&

Aşağıdaki örnekte ise İndirect yapısını kullanarak Veri yapısında bulunan Ağaç yapısını enum ile gerçekleyebiliriz buna benzer olarak bağlı listede gerçeklenebilir.

indirect enum AVLTree {
    case Empty
    case Node(value:Int,left:AVLTree,right:AVLTree)
}

var node1 = AVLTree.Node(value: 1, left: AVLTree.Empty, right: AVLTree.Empty)
var node2 = AVLTree.Node(value: 2, left: AVLTree.Empty, right: AVLTree.Empty)
var node3 = AVLTree.Node(value: 3, left: AVLTree.Empty, right: AVLTree.Empty)
var node4 = AVLTree.Node(value: 4, left: node1, right: node2)
var node5 = AVLTree.Node(value: 5, left: node3, right: AVLTree.Empty)
var root6 = AVLTree.Node(value: 6, left: node4, right: node5)

Tarih:Swift

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca