let disposeBg = DisposeBag()
//直接在建立
//在 subscribe 方法中建立
let ofObserval = Observable.of("a","b","c")
ofObserval.subscribe(onNext: { (element) in
print(element)
}, onError: { (error) in
print(error.localizedDescription)
}, onCompleted: {
print("完成")
}) {
print("取消")
}.disposed(by: disposeBg) let schedulerObserval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
//在 bind 方法中建立
schedulerObserval
.map {
"當前索引:\($0)" //返回字串
}
.bind {(value) in
//action
print(value)
}
.disposed(by: disposeBg)
//寫在appdelegate裡不執行,寫在VC里正常??? //AnyObserver 可以用來描敘任意一種觀察者。
//配合 subscribe 方法使用
let anyObserval:AnyObserver<String> = AnyObserver{ event in
switch event{
case .next(let data):
//action
print(data)
case .error(let error):
print(error)
case .completed:
print("完成")
}
}
// let anyOB = ofObserval.subscribe(anyObserval)
// print(anyOB) //配合 bindTo 方法使用
schedulerObserval
.map{"點前索引\($0)"}
.bind(to: anyObserval)
.disposed(by:disposeBg) /*===> 寫在appdelegate裡不執行,寫在VC里正常???
當前索引:0
當前索引:1
當前索引:2
當前索引:3
當前索引:4
當前索引:5
當前索引:6
當前索引:7
當前索引:8
當前索引:9
當前索引:10
*/

  

    @IBOutlet weak var label: UILabel!
@IBOutlet weak var mbutton: UIButton! let disposeBag = DisposeBag() //上面序列數顯示樣例中,label 標籤的文字顯示就是一個典型的 UI 觀察者。
//它在響應事件時,只會處理 next 事件,而且更新 UI 的操作需要在主執行緒上執行。
//那麼這種情況下更好的方案就是使用 Binder。
let blinderObserval:Binder<String> = Binder(label){view,text in
view.text = text
} //Observable序列(每隔1秒鐘發出一個索引數)
let scheduleObservable = Observable<Int>.interval(1, scheduler: MainScheduler.instance) scheduleObservable
.map{"當前索引\($0)"}
.bind(to: blinderObserval)
.disposed(by: disposeBag) scheduleObservable
.map {$0 % 2 == 0}
.bind(to: mbutton.rx.isEnabled)
.disposed(by: disposeBag) //Binder 在 RxCocoa 中的應用
let schedulerObserval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
//在 bind 方法中建立
schedulerObserval
.map {
"當前索引:\($0)" //返回字串
}
.bind {(value) in
//action
print(value)
}
.disposed(by: disposeBag)

  補充知識:

        //Swift==>map
let array = [1,2,3,4,5] let mapArray = array.map { (value) -> Int in
return value + 2
}
print(mapArray)
//===>[3, 4, 5, 6, 7] let mapArray1 = array.map{
return $0*2
}
print(mapArray1)
//===>[2, 4, 6, 8, 10] func arrayCount(int:Int) -> Int{
return int*3
}
let mapArray0 = array.map(arrayCount)
print(mapArray0)
//===>[3, 6, 9, 12, 15] /*
2 flatMap與map不同之處:
(1)flatMap返回後的陣列中不存在nil,同時它會把Optional解包
(2)flatMap還能把陣列中存有陣列的陣列(二維陣列、N維陣列)一同開啟變成一個新的陣列
*/
//Swift==>flatMap
let mapArr = array.map { (int) -> String? in
let ms = "\(int)"
return ms
}
print(mapArr)
//===>[Optional("1"), Optional("2"), Optional("3"), Optional("4"), Optional("5")] //flatMap' is deprecated: Please use compactMap(_:)
//for the case where closure returns an optional value Use 'compactMap(_:)' instead
let mapArr1 = array.compactMap { (int) -> String? in
let ms = "\(int)"
return ms
}
print(mapArr1)
//===>["1", "2", "3", "4", "5"] let testArray = [[1,2,3],[4,5,6],[7,8,9]]
let mapArray3 = testArray.map{$0}
print(mapArray3)
//===>[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let mapArray4 = testArray.flatMap{$0}
print(mapArray4)
//===>[1, 2, 3, 4, 5, 6, 7, 8, 9]