前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxSwift概念系列入门

RxSwift概念系列入门

作者头像
大话swift
发布2019-10-22 15:24:28
4430
发布2019-10-22 15:24:28
举报
文章被收录于专栏:大话swift大话swift

基本核心概念 Observable

Observable的层级概念

public class Observable<Element> : ObservableType ---->

public protocol ObservableType: ObservableConvertibleType

ObservableType的核心作用

1 定义统一的方法

代码语言:javascript
复制
 func subscribe<Observer: ObserverType>(_ observer: Observer) -> Disposable where Observer.Element == Element

2 使子类统一具有可观察功能

代码语言:javascript
复制
extension ObservableType {
    
    /// Default implementation of converting `ObservableType` to `Observable`.
    public func asObservable() -> Observable<Element> {
        // temporary workaround
        //return Observable.create(subscribe: self.subscribe)
        return Observable.create { o in
            return self.subscribe(o)
        }
    }
}

常用使用

//Observable一系列方法

Observable.from(["1","2"]).subscribe{

print($0)

}.dispose()

Observable.of("1","2").subscribe{

print($0)

}.dispose()

Observable<String>.create { (observer) -> Disposable in

observer.onNext("1")

observer.onCompleted()

return Disposables.create()

}.subscribe{

print($0)

}.dispose()

Observable.range(start: 0, count: 10).subscribe{

print($0)

}

var times = 0

let factory = Observable<Any>.deferred {

times+=1

return Observable.of(0..<times)

}

for i in 0...10{

factory.subscribe{

print($0)

}

}

订阅模式

//订阅

Observable.of("A","B").subscribe{

event in

print(event)

}

//可以缩写省略

Observable.of("A" ... "D").subscribe{

print($0)

}

订阅可以关注整个过程或者某过程某一部分

代码语言:javascript
复制
//订阅显示整个过程
Observable.of("A","B","C").subscribe(onNext: { (item) in
    print(item)
}, onError: { (error) in
    print(error)
}, onCompleted: {
    
}) {
    
}

//关注某一个过程
Observable.of("A").subscribe(onNext: { (item) in
 print(item)
})

Variables的使用

代码语言:javascript
复制
let disposeBag = DisposeBag()
   struct Person {
      var name: Variable<String> //再次修改的时候会重新发送single
   }
   let scott = Person(name: Variable("Scott"))
   let lori = Person(name: Variable("Lori"))
   let person = Variable(scott)
person.asObservable().flatMap { (p) -> Observable<String> in
    return p.name.asObservable()
}.subscribe(onNext: { (name) in
print(name)
    }).disposed(by: disposeBag)

    person.value = lori
    scott.name.value = "Eric"

通过Variable可以监听内部Value值修改变化,如上栗中 person.value = lori scott.name.value = "Eric"进行修改时均会一起注册监听的回调

更直观的例子

代码语言:javascript
复制
let search = Variable("iOS")
search.asObservable().map{
    $0.lowercased()
    }.distinctUntilChanged()
    .subscribe { (e:Event<String>) in
    print(e)
}.disposed(by: disposeBag)

search.value = "IOS"
search.value = "Rx"

当修改search的value时订阅回调

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档