zoukankan      html  css  js  c++  java
  • 第37月第16天 rxswift

    1.

    let disposeBag = DisposeBag()
        
    // 1
    let o1  = Student(score: Variable(1))
    let o2 = Student(score: Variable(2))
    let o3 = Student(score: Variable(4))
        
    // 2
    let student = PublishSubject<Student>()
        
    // 3
    student.asObservable()
        .flatMapLatest {
            $0.score.asObservable()
        }
        .map {
            $0 * 10
        }
        .subscribe(onNext: {
            print($0)
        })
        .addDisposableTo(disposeBag)
        
    student.onNext(o1)
    student.onNext(o2)
    
    o1.score.value = 3
    
    student.onNext(o3)
    
    o2.score.value = 5
    
    o3.score.value = 6
    
    student.onCompleted()

    https://segmentfault.com/a/1190000011450314

    3,materialize

    (1)基本介绍
    • 该操作符可以将序列产生的事件,转换成元素。
    • 通常一个有限的 Observable 将产生零个或者多个 onNext 事件,最后产生一个 onCompleted 或者 onError 事件。而 materialize 操作符会将 Observable 产生的这些事件全部转换成元素,然后发送出来。

            AudioProvider

            .fetchAudioBanners()

            .materialize()

            .elements()

            .subscribeNext(weak: self) { (self) in

                return { (resps) in

                    print(resps)

                }

            }

            .disposed(by: disposeBag)

            let disposeBag = DisposeBag()
            
            let refreshRelay = PublishSubject<Void>()
    
            let refresh = refreshRelay
                .asObservable()
                .share()
    
            refresh.subscribe {(event) in
                print(event)
            }.disposed(by: disposeBag)
            
            refreshRelay.onNext(Void())

    https://www.bilibili.com/video/av44971632/?p=10

    https://www.hangge.com/blog/cache/detail_1950.html

    3.

    1)Value of type 'Observable<Event<[MusicSheetInfo]>>' has no member 'elements'

        public func elements() -> Observable<E.ElementType> {
            return filter { $0.event.element != nil }
                    .map { $0.event.element! }
        }

    2)subscribeNext

        public func subscribeNext<A: AnyObject>(weak obj: A, _ onNext: @escaping (A) -> (Self.E) -> Void) -> Disposable {
            return self.subscribe(onNext: weakify(obj, method: onNext))
        }

    pod 'RxSwiftExt', '~> 3.4.0'

            let disposeBag = DisposeBag()

            

            let refreshRelay = PublishSubject<Void>()

     

            let refresh = refreshRelay

                .asObservable()

                .share()

            

            let ballad = MusicSheetInfo()

            ballad.type = 23

            ballad.title = "情歌对唱榜"

            ballad.imgUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1554616722369&di=cdfdf3fc4c951c44e40b9d63cad0a2a9&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2F82fe4556b587af3350ff80d56bf803eac661d75f.jpg"

     

            var bannerLoaded: Observable<[MusicSheetInfo]>

            

            let a2 = Observable.just([ballad])

            let a3 =  a2.materialize()

            let bannerReq = refresh

                .flatMap {

                    a3

                       

                }.share()

            

    //        bannerLoaded = bannerReq.elements()

            

            bannerLoaded = bannerReq.filter { $0.event.element != nil }

            .map { $0.event.element! }

            

            bannerLoaded.subscribe(onNext: { (resps) in

                print("11",resps)

            }).disposed(by: disposeBag)

     

     

    //        bannerLoaded

    //        .subscribeNext(weak: self) { (self) in

    //            return { (resps) in

    //                 print("22",resps)

    //            }

    //        }.disposed(by: disposeBag)

     

            refreshRelay.onNext(Void())

    Printing description of a2:  <Just<Array<MusicSheetInfo>>: 0x6000019112c0>

    Printing description of a3:  <Materialize<Array<MusicSheetInfo>>: 0x60000192c560>

    Printing description of bannerReq:  <ShareWhileConnected<Event<Array<MusicSheetInfo>>>: 0x600001709080>

    Printing description of bannerLoaded:  <Map<Event<Array<MusicSheetInfo>>, Array<MusicSheetInfo>>: 0x600001709350>

    Printing description of resps:

    ▿ 1 element

      ▿ 0 : <studyRxswift.MusicSheetInfo: 0x600001704030>

    //        let bannerLoaded = bannerReq
    //            .filter { $0.event.element != nil }
    //            .map { $0.event.element! }
    //        bannerLoaded.subscribe(onNext: { (resps) in
    //            print("11",resps)
    //        }).disposed(by: disposeBag)
            
            
            bannerReq.subscribe(onNext: { (event) in
                print("11",event.event.element!)
            }).disposed(by: disposeBag)

     4.Moya MultiTarget

    extension ZY where Base: MoyaProvider<MultiTarget> {
        @discardableResult
        open func request(_ target: TargetType, completion: @escaping Moya.Completion) -> Cancellable {
            return base.request(MultiTarget(target), queue: nil, completion: completion)
        }
        @discardableResult
    //Post是实现TargetType协议的枚举
        func post(_ target: Post, completion: @escaping Moya.Completion) -> Cancellable {
            return base.request(MultiTarget(target), queue: nil, completion: completion)
        }
        @discardableResult
    //Get是实现TargetType协议的枚举
        func get(_ target: Get, completion: @escaping Moya.Completion) -> Cancellable {
            return base.request(MultiTarget(target), queue: nil, completion: completion)
        }
    
    }
    //TODO:waiting for swift 4 https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances-
    extension MoyaProvider: ZYCompatible /*where Target: MultiTarget*/{}
    
    let publicParamEndpointClosure = { (target: MultiTarget) -> Endpoint<MultiTarget> in
        let url = target.path.isEmpty ? target.baseURL.absoluteString : target.baseURL.appendingPathComponent(target.path).absoluteString
        let endpoint = Endpoint<MultiTarget>(url: url, sampleResponseClosure: { .networkResponse(200, target.sampleData) }, method: target.method, parameters: target.parameters, parameterEncoding: target.parameterEncoding)
        return endpoint.adding(newHTTPHeaderFields: ["Content-Type" : "application/json"])
    }
    
    let zyApi:ZY<MoyaProvider<MultiTarget>> = { () -> MoyaProvider<MultiTarget> in
        let manager = Manager(configuration: URLSessionConfiguration.default,serverTrustPolicyManager:CustomServerTrustPoliceManager())
        let provider = MoyaProvider(endpointClosure: publicParamEndpointClosure, manager:manager,plugins:[NetworkLoggerPlugin(verbose: true)])
        return provider
    }().zy
    
    class CustomServerTrustPoliceManager : ServerTrustPolicyManager {
        override func serverTrustPolicy(forHost host: String) -> ServerTrustPolicy? {
            return .disableEvaluation
        }
        public init() {
            super.init(policies: [:])
        }
    }

    https://www.jianshu.com/p/574201cfd61c

  • 相关阅读:
    hdu 1395 2^x(mod n) = 1(C++)(欧拉定理 分解素因数)
    6. 数论准备知识
    hdu 2973 YAPTCHA(C++)(威尔逊定理)
    牛客小白月赛12——B.华华教月月做数学
    牛客小白月赛12——A.华华听月月唱歌
    5. 卡特兰数(Catalan)公式、证明、代码、典例.
    4.质数判定和质数筛法(埃拉托色尼筛选法,线性筛法/欧拉筛法)
    3.牛顿迭代法求解方程的根
    Codeforces刷题
    刷题计划
  • 原文地址:https://www.cnblogs.com/javastart/p/11683616.html
Copyright © 2011-2022 走看看