İçeriğe geç

Swift 5.1 ile Opaque Return Types

Merhabalar bu yazımda Swift 5.1 ile aramıza katılan önemli yeniliklerden Opaque Return Type kullanımından bahsedeceğim.

Dile eklenen bu ek return parametresi ile önceden oluşan bir sorun çözülmüş oluyor. Nedir bu sorun ? diyecek olursanız.

Aşağıdaki örnek üzerinden gidelim.

protocol Animal {
    func isSibling(with animal: Self) -> Bool
}

class Dog: Animal {
    func isSibling(with animal: Dog) -> Bool {
        return true
    }
}

func createAnimal() -> Animal {
    return Dog()
}

let animal1 = createAnimal()
let animal2 = createAnimal()

animal1.isSibling(with: animal2)

Animal protokolüne bağlı bir Dog sınıfı görmekteyiz. Bu protokole bağlı daha bir çok sınıf olabilir. Swift derleyicisi return protokol işleminde bu sınıfların ne olduğunu önceden bilemiyor ve createAnimal() fonksiyonu çalıştığında uyarı veriyor. (protokolu ‘Animal’ yalnızca genel bir kısıtlama olarak kullanılabilir, çünkü Kendi kendine veya ilişkili tür gereksinimlerine sahiptir) ancak yeni eklenen ön ek ile bu hata giderilmekte ve geri dönüş elde edilmektedir.

func createAnimal() -> some Animal {
    return Dog()
}

Aşağıda Apple tarafından verilen güzel bir örneğide sizlerle paylaşayım.

protocol Container {
    associatedtype Item
    var count: Int { get }
    subscript(i: Int) -> Item { get }
}

extension Array: Container { }

func makeOpaqueContainer<T>(item: T) -> some Container {
    return [item]
}

let opaqueVal = makeOpaqueContainer(item: 10)[0]
print(type(of: opaqueVal)) // Int

Swift 5 ile some kullanmadan bir return işlemi gerçekleştirdiğimizde derleyici uyarısı ile karşılaşırsınız.

 

 

 

 

Tarih:SwiftSwift 5

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2020 Kenan Atmaca