Rx dünyasındaki bir özellik, temelde, ham Observable ile daha fazla zaman alabilmesi farkıyla, ham gözlemlenebilir ile yapabildiğimiz aynı şeyi yapmamıza yardımcı olan, sarılmış bir Gözlenebilir veya kullanışlı, özel yapılmış gözlemlenebilir öğelerdir. RxSwift için mevcut olan bazılarını tartışacağız.

Single, yalnızca bir olay veya hata yayacak olan sarmalanmış gözlemlenebilirlerdir. İyi bir kullanım, yalnızca bir yanıt veya hata aldığımız ağ isteği olabilir. Temelde ne zaman tek bir olaya ihtiyacımız olursa ve bir olay akışına değil bu özelliği kullanabiliriz.

Ağ İsteği Örneği

Burada bir ağ aramasından bir kullanıcı listesi alıyoruz

struct User:Codable {
    var name:String
}
func getUsers() -> Single<[User]> {
    return Single<[User]>.create { observer in
        let request = URLRequest(url: URL(string: "http://www.json-generator.com/api/json/get/bYQWgUrEte")!)
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            do {
                let users:[User] = try JSONDecoder().decode([User].self, from: data ?? Data())
                observer(.success(users))

            } catch let error {
                observer(.error(error))
            }
        }
        task.resume()

        return Disposables.create {
            task.cancel()
        }
    }
}

getUsers().subscribe(onSuccess:{(result) in
    print(result)
}) {(error) in
    print(error)
}
let singleOne = Single<String>.just("I am a single event emitter")
singleOne.subscribe(onSuccess:{(result) in
    print(result)
}) {(error) in
    print(error)
}

Çıktı :

I am a single event emitter

Bu gözlemlenebilir varyasyonu yalnızca tamamlanabilir veya bir hata verebilir. Bu herhangi bir element yaymaz. Bize yalnızca tamamlanmış bir olay veya hata verecektir. Bu, bir görevin / işlemin hatasız yapılmasını istediğimiz ve ondan hiçbir şeye ihtiyacımız olmadığından emin olmak istediğimiz senaryo için mükemmel olabilir.

Veritabanına kaydediyorsanız veya sunucuya bir dosya yüklüyorsanız, yalnızca görevin hatasız yapılmasını önemsediğinizde iyi bir kullanım durumu olabilir.

let comp = Completable.empty()
comp.subscribe(onCompleted:{
    print("completed")
}) {(error) in
    print(error)
}

Çıktı : 

completed

References

https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Traits.md