Combine ile Network Katmanı Nasıl Oluşturulur?

0 الردود 2 المشاهدات
·
المشاركون
صاحب الموضوع #1
Combine framework, Apple tarafından geliştirilen ve reaktif programlama paradigmasını iOS ve macOS uygulamalarına entegre eden güçlü bir araçtır. Ancak, "combine ile network katmanı nasıl oluşturulur?" sorusu, genellikle uygulama mimarisinde asenkron veri akışını yönetme ve ağ işlemlerini düzenleme konusuna odaklanır. Bu noktada, temel amacımız, Combine kullanarak API çağrılarını yönetmek ve gelen veriyi uygun şekilde işlemek.




İşte bu sürecin temel adımlarını ve örnek uygulamasını detaylandırıyorum:

  1. URLSession ile Temel Ağ İsteği

Combine, URLSession ile birlikte kullanıldığında, dataTaskPublisher metodu, asenkron ağ çağrılarını reaktif akışlara dönüştürür. Bu sayede, gelen yanıtları tek tek değil, akış olarak yönetebiliriz. Örneğin:

كود
12345678910111213swift  
import Combine  
import Foundation  

class NetworkService {  
    var cancellables = Set()  
  
    func fetchData(from url: URL) -> AnyPublisher {  
        return URLSession.shared.dataTaskPublisher(for: url)  
            .map(\.data)  
            .eraseToAnyPublisher()  
    }  
}  


  1. Veri İşleme ve Hataların Yönetimi

Combine ile gelen veriyi JSON decode etmek veya başka işlemler yapmak oldukça kolaydır. Ayrıca, hata yönetimi de akışın bir parçası haline gelir. Örneğin, JSON decode etmek için:

كود
123456swift  
func fetchAndDecode(from url: URL, type: T.Type) -> AnyPublisher {  
    fetchData(from: url)  
        .decode(type: T.self, decoder: JSONDecoder())  
        .eraseToAnyPublisher()  
}  


  1. Abonelik ve Ağ Akışını Kontrol

Combine, abonelikleri (subscriptions) yönetmenizi sağlar. Bu, bellek sızıntılarını önlemek veya birden fazla isteği koordine etmek açısından kritiktir. Örnek:

كود
1234567891011swift  
fetchAndDecode(from: someURL, type: MyModel.self)  
    .sink(receiveCompletion: { completion in  
        switch completion {  
        case .finished: print("İstek tamamlandı")  
        case .failure(let error): print("Hata: \(error.localizedDescription)")  
        }  
    }, receiveValue: { model in  
        print("Gelen Veri: \(model)")  
    })  
    .store(in: &cancellables)  


Sonuç olarak, Combine ile network katmanı kurarken, temel prensipler; URLSession'un Combine uyumlu metodlarını kullanmak, gelen veriyi uygun şekilde decode etmek ve abonelikleri dikkatli yönetmektir. Bu yaklaşım, kodun okunabilirliğini artırır ve hata yönetimini kolaylaştırır.

Yukarıdaki adımlar ve örnekler, modern Swift uygulamalarında reaktif network mimarisi kurmak için sağlam bir temel sağlar.

يجب تسجيل الدخول للرد.

0 اقتباسات محددة