RxSwift-场景序列

2019-08-12  本文已影响0人  Code_人生

简化创建流程
简化订阅流程

ControlEvent

        let controlEventOB = self.button.rx.controlEvent(.touchUpInside)
        
        controlEventOB.subscribe { (result) in
            print("订阅:\(result)  \(Thread.current)")
        }.disposed(by: self.disposeBag)
        
        controlEventOB.subscribe { (result) in
            print("订阅:\(result)  \(Thread.current)")
            }.disposed(by: self.disposeBag)

订阅:next(())  <NSThread: 0x600001920bc0>{number = 1, name = main}
订阅:next(())  <NSThread: 0x600001920bc0>{number = 1, name = main}

Binder

//        let observer: AnyObserver<Bool> = AnyObserver{ (event) in
//            print("observer 当前线程:\(Thread.current)")
//            switch event {
//            case .next(let value):
//                self.label.isHidden = value
//                break
//            case .error(let error):
//                print("observer error:\(error)")
//                break
//            case .completed:
//                print("完成了")
//                break
//            }
//        }
        
        let binder = Binder<Bool>(self.label) { (lab, value) in
             print("Binder 当前线程:\(Thread.current)")
            lab.isHidden = value
        }
        
        let observable = Observable<Bool>.create { (ob) -> Disposable in
            ob.onNext(true)
//            ob.onError(NSError.init(domain: "com.imefuture.cn", code: 10090, userInfo: nil))
//            ob.onCompleted()
            return Disposables.create()
        }.observeOn(ConcurrentDispatchQueueScheduler(queue: DispatchQueue.global()))
        
//        observable.bind(to: observer).disposed(by: self.disposeBag)
        observable.bind(to: binder).disposed(by: self.disposeBag)

Driver

        let result = self.textFiled.rx.text.orEmpty
            .asDriver() //普通序列转化为
            .throttle(.milliseconds(500))
            .flatMap {
                self.dealWithData(inputText: $0)
                    .asDriver(onErrorJustReturn: "检测到了错误")
        }
        
        result.map { "长度:\(($0 as! String).count)"}
            .drive(self.label.rx.text)
            .disposed(by: disposeBag)
        
        result.map { ($0 as! String) }
            .drive(self.button.rx.title())
            .disposed(by: disposeBag)

    func dealWithData(inputText: String) -> Observable<Any> {
        print("请求网络了 \(Thread.current)")
        return Observable<Any>.create({ (ob) -> Disposable in
            if inputText == "1234" {
                ob.onError(NSError.init(domain: "com.dyz.cn", code: 2019, userInfo: nil))
            }
            DispatchQueue.global().async {
                print("发送之前看看:\(Thread.current)")
                ob.onNext("已经输入:\(inputText)")
                ob.onCompleted()
            }
            return Disposables.create()
        })
    }

Signal

        let result = self.textFiled.rx.text.orEmpty
            .asSignal(onErrorJustReturn: "没有值")
            .throttle(.milliseconds(500))
            .flatMap {
                self.dealWithData(inputText: $0 )
                    .asSignal(onErrorJustReturn: "检测到了错误")
        }
        
        result.map { "长度:\(($0 as! String).count)" }
            .emit(to: self.label.rx.text)
            .disposed(by: disposeBag)
        
        result.map { ($0 as! String) }
            .emit(to: self.button.rx.title())
            .disposed(by: disposeBag)

Single

        let singleOB = Single<Any>.create { (single) -> Disposable in
            print("singleOB 是否共享")
            single(.success("Dyz"))
            single(.success("Hello"))
            single(.error(NSError.init(domain: "com.ime.cn", code: 098, userInfo: nil)))
            return Disposables.create()
        }
        
        singleOB.subscribe { (result) in
            print("订阅:\(result)")
        }.disposed(by: self.disposeBag)
        singleOB.subscribe { (result) in
            print("订阅:\(result)")
        }.disposed(by: self.disposeBag)

singleOB 是否共享
订阅:success("Dyz")
singleOB 是否共享
订阅:success("Dyz")

Completable

        let completableOB = Completable.create { (completable) -> Disposable in
            print("completableOB 是否共享")
            completable(.completed)
            completable(.error(NSError.init(domain: "com.ime.cn", code: 909, userInfo: nil)))
            return Disposables.create()
        }
        
        completableOB.subscribe { (result) in
            print("订阅:\(result)")
        }.disposed(by: disposeBag)
        
        completableOB.subscribe { (result) in
            print("订阅:\(result)")
        }.disposed(by: disposeBag)

completableOB 是否共享
订阅:completed
completableOB 是否共享
订阅:completed

Maybe

        let maybeOB = Maybe<Any>.create { (maybe) -> Disposable in
            print("maybeOB 是否共享")
            maybe(.success("dyz"))
            maybe(.completed)
            maybe(.error(NSError.init(domain: "com.ime.cn", code: 89, userInfo: nil)))
            return Disposables.create()
        }
        
        maybeOB.subscribe { (result) in
            print("订阅:\(result)")
        }.disposed(by: disposeBag)
        
        maybeOB.subscribe { (result) in
            print("订阅:\(result)")
        }.disposed(by: disposeBag)

maybeOB 是否共享
订阅:success("dyz")
maybeOB 是否共享
订阅:success("dyz")
上一篇 下一篇

猜你喜欢

热点阅读