İçeriğe geç

Swift 3 ile Generic Where Clauses kullanımı

Swift 3

Merhabalar bu yazımda Swift 3 ile kullanımı değişen diğer bir özellikte where ekini generics üzerindeki kullanımı oldu. Yeni kullanım eski kullanıma göre daha okunaklı ve daha güzel bir hal almış oldu.

where ekini çoğu programlama dilinde ek sorgulayıcı olarak kullanırız. Swift dilindede bazı durumlarda if yerine veya if ile beraber ek sorgulamalar yapabiliriz. Bu kullanım bize daha kısa kod ve kodun daha okunaklı efektiv olmasını sağlar.

Bildiğimiz gibi Swift 2014 yılında çıkışını gerçekleştirmiş piyasadaki en son çıkan dil ve en modern dil. Bu yüzden yaratıcıları dilin her konudan diğer dillerden daha verimli olması için çabalıyorlar. Kişisel olarak bu yenilikler oldukça güzel ve dilin geleceği için oldukça memnun edici.

Aşağıdaki verdiğim örnekte generics ile where kullanımındaki değişimi görebilirsiniz.

var array:[String] = ["A","B","C","D"]
var array2:[String] = ["3","1","1","5"]

func arrayControl<T>(lhsa:[T],rhsa:[T]) -> Bool where T:Comparable {

    return lhsa == rhsa
}

arrayControl(lhsa: array, rhsa: array2)

Generics Swift için en önemli konuların başında gelir oldukça yararlıdır. Aynı fonksiyonları,sınıfları tekrar tekrar farklı değişken türü için yazmanıza gerek kalmaz.

Diğer bir örneğimde ise türünü sizin belirlediğiniz Stack yapısında kullanımını görebilirsiniz.

protocol Container {
    
    associatedtype Item
    mutating func push(item:Item)
    mutating func pop()
    var count:Int {get}
    subscript(i:Int) -> Item {get}
    
}


struct Stack<Element>:Container {
    
    var items = [Element]()
    
    mutating func push(item:Element) {
        items.append(item)
    }
    
    mutating func pop(){
        items.removeLast()
    }
    
    var count:Int {
        return items.count
    }
    
    subscript(i:Int) -> Element {
        return items[i]
    }
}


var stack = Stack<String>()
stack.push(item: "A")
stack.push(item: "B")
stack.push(item: "C")
stack.items // A,B,C
stack.pop() // A,B

var stack2 = Stack<String>()
stack2.push(item: "C")
stack2.push(item: "A")
stack2.push(item: "B")
stack2.items // C,A,B
stack2.pop() // B


func itemsMatch<c1:Container,c2:Container>(_ item1:c1,_ item2:c2) -> Bool  where c1.Item == c2.Item, c1.Item:Equatable , c2.Item:Equatable {
    
    if item1.count != item2.count {
        return false
    }
    
    for i in 0..<item1.count {
        
        if item1[i] != item2[i] {
            return false
        }
    }
    
    return true
}

itemsMatch(stack, stack2) // false

 

 

Tarih:SwiftSwift 3

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca