RXSwift demo

//
//  ViewController.swift
//  RXSwiftTest
//
//  Created by wjr on 2018/11/15.
//  Copyright © 2018 wjr. All rights reserved.
//

import UIKit
import RxSwift
import RxCocoa

class NetWork: NSObject {
    
    class func Get(block : @escaping (Int) -> Void) -> Void {
        DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
            block(1);
        }
    }
    
    class func Post(block : @escaping (Int) -> Void) -> Void {
        DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
            block(2);
        }
    }
}

class ViewController: UIViewController {
    let globalScheduler = ConcurrentDispatchQueueScheduler(queue: DispatchQueue.global())
    var disposeBag = DisposeBag();
    var button : UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        
        button = UIButton(frame: CGRect(x: 0, y: 70, width: 100, height: 100));
        button.setTitle("测试", for: .normal);
        button.backgroundColor = UIColor.red;
        self.view.addSubview(button);
        
        button.rx.tap
            .subscribe(onNext: { [weak self] in
                guard let this = self else {
                    print("出错了")
                    return
                }
                this.button.backgroundColor = UIColor.blue;
                this.testFlatMap();
                this.test()
            })
            .disposed(by: disposeBag)
        
        
        
        
    }
    
    func createObservable() -> Observable<Int>
    {
        return Observable.just(2);
    }
    
    func addFlatMap(a:Int) -> Observable<Int> {
      
        return Observable<Int>.create({ (observer) -> Disposable in
            observer.onNext(a + a)
            observer.onCompleted()
            return Disposables.create();
            }).subscribeOn(globalScheduler).delay(3, scheduler: globalScheduler)
    }
    
    func multiplyFlatMap(a:Int) -> Observable<Int> {
        return Observable<Int>.create{ (observer) -> Disposable in
            observer.onNext(a * a)
            observer.onCompleted()
            return Disposables.create()
        }.subscribeOn(globalScheduler)
    }
    
    
    func testFlatMap() -> Void {
        _ = createObservable().flatMap(addFlatMap)
            .flatMap(multiplyFlatMap)
            .subscribe( onNext:{ num in
                print("结果: \(num)")
            })
    }
    
    //--------------------------------------------------------------
    
    
    func test()
    {
        var students : [Student] = [Student]()
        var student = Student(age:10,sex:"man");
        students.append(student)
        student = Student(age:15,sex:"woman");
        students.append(student);
        student = Student(age:20,sex:"man");
        students.append(student);
        
        let results : [Student] = students.filter{ s -> Bool in
            return s.age <= 15 && s.sex == "man"
        }
        
        
        let observer : Observable<Int> = Observable.create { (observer) -> Disposable in
            
            NetWork.Post(block: { (a : Int) in
                observer.onNext(a)
            })
            
            NetWork.Get(block: { (a : Int) in
                observer.onNext(a)
            })
            
            return Disposables.create()
        }
        
        observer.subscribe(onNext: { (a) in
            print("NetWork Result:\(a)")
        }, onError: {  error in
            print("NetWork Result:onError")
        }, onCompleted: {
            print("NetWork Result:onCompleted")
        }) {
            print("NetWork Result:disposeBag")
        }.disposed(by: disposeBag)
        
       
        NetWorkTest().subscribe(onNext: { (a) in
            print("2 NetWork Result:\(a)")
        }, onError: {  error in
            print("2 NetWork Result:onError")
        }, onCompleted: {
            print("2 NetWork Result:onCompleted")
        }) {
            print("2 NetWork Result:disposeBag")
            }.disposed(by: disposeBag)
        
        
        Observable.zip(
            zipTest1(),
            zipTest2()
            ).subscribe(onNext: { (a:Int,b:Int) in
                
                print("zip 结果: \(a) \(b)")
            }, onError: { error in
                
            }, onCompleted: {
                
            })
            {
                
        }.disposed(by: disposeBag)
        

        
        print("\(results)")
    }
    
    func NetWorkTest() -> Observable<Int> {
        return Observable<Int>.create({ (observer) -> Disposable in
            NetWork.Post(block: { (a : Int) in
                observer.onNext(a)
            })
            
            NetWork.Get(block: { (a : Int) in
                observer.onNext(a)
            })
            
            return Disposables.create()
        })
    }
    
    
    func zipTest1() -> Observable<Int> {
        return Observable<Int>.create({ (observer) -> Disposable in
            NetWork.Get(block: { (a : Int) in
                print("zipTest 1 结果:\(a)")
                observer.onNext(a)
            })
            return Disposables.create();
        })
    }
    
    func zipTest2() -> Observable<Int> {
        return Observable<Int>.create({ (observer) -> Disposable in
            NetWork.Post(block: { (a : Int) in
                print("zipTest 2 结果:\(a)")
                observer.onNext(a)
            })
            return Disposables.create();
        })
    }

}




class Student : NSObject{
    var age : Int = 1
    var sex = "man"
    init(age: Int ,sex: String) {
        self.age = age;
        self.sex = sex;
    }
}

猜你喜欢

转载自blog.csdn.net/HeroRazor/article/details/84138570