RxSwift笔记 - Creating Observables

57 篇文章 1 订阅
23 篇文章 0 订阅

create()

使用一个函数从头创建一个Observable

create.png

/// 创建可观察对象
let id = Observable<Int>.create {  observer in
    observer.onNext(0)
    observer.onNext(1)
    observer.onNext(2)
    observer.onNext(3)
    observer.onNext(4)
    observer.onCompleted()
    return Disposables.create()
}

/// 订阅可观察对象
id.subscribe(onNext: { id in
    print(id)
}, onCompleted: {
    print("completed")
})

just()

创建一个只产生唯一一个元素的 Observable

just.png

let justID = Observable.just(0)
/// 等价于
let justID1 = Observable<Int>.create { (observer) -> Disposable in
    observer.onNext(0)
    observer.onCompleted()
    return Disposables.create()
}

from() / of()

将其他类型或者数据结构转换为 Observable

from.png

/// eg: 1 将一个数组转换为 Observable
let numbers = Observable.from([0, 1, 2])
/// 等价于
let numbers1 = Observable<Int>.create { (observer) -> Disposable in
    observer.onNext(0)
    observer.onNext(1)
    observer.onNext(2)
    observer.onCompleted()
    return Disposables.create()
}

/// eg: 2 将一个可选值转换为 Observable
let optional: String? = nil
let value = Observable.from(optional: optional)
/// 等价于
let optional1 = Observable<String>.create { (observer) -> Disposable in
    if let element = optional {
        observer.onNext(element)
    }
    observer.onCompleted()
    return Disposables.create()
}

repeatElement()

创建一个重复发出某个元素的 Observable

repeatElement.png

let repeatID = Observable.repeatElement(666)
repeatID.subscribe(onNext: { element in
    print(element)
})

generate()

该方法创建一个只有当提供的所有的判断条件都为 true 的时候,才会给出动作的 Observable 序列

let generateID = Observable<Int>.generate(initialState: 0,
                                          condition: { $0 <= 10},
                                          iterate: { $0 + 2 })

/// 等价于: 使用of()方法
let generateIDs = Observable.of(0, 2, 4, 6, 8, 10)

generateID.subscribe(onNext: { (num) in
    print(num)
})

deferred()

只有当订阅者订阅才创建Observable;为每个订阅创建一个新的Observable

deferred.png

let deferID = Observable<Int>.deferred { () -> Observable<Int> in
    return Observable<Int>.create({ observer in
        observer.onNext(666)
        observer.onCompleted()
        return Disposables.create()
    })
}

range()

创建一个发射特定整数序列的 Observable

range.png

let rangeID = Observable<Int>.range(start: 0, count: 10)
rangeID.subscribe(onNext: { (num) in
    print(num)
}, onCompleted: {
    print("completed")
})

interval()

创建一个按照给定的时间间隔发射整数序列的Observable

Interval操作符返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列

interval.c.png

let interval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
interval.subscribe ({ event in
    print(event)
})

timer()

创建一个 Observable 在一段延时后,产生唯一的一个元素

timer.png

let timerID = Observable<Int>.timer(1, scheduler: MainScheduler.instance)

timerID.subscribe(onNext: { (num) in
    print(num)
})

empty()

创建一个只有一个完成事件的 Observable

empty.png

 let emptyId = Observable<Int>.empty()

/// 等价于
let emptyId1 = Observable<Int>.create { observer -> Disposable in
    observer.onCompleted()
    return Disposables.create()
}

error()

创建一个只有 error 事件的 Observable

error.png

enum MyError: Error {
    case A
    case B
}

let observable = Observable<Int>.error(MyError.A)

never()

创建一个不发射任何数据的Observable

never.png

let neverID = Observable<Int>.never()

/// 等价于
let neverID2 = Observable<Int>.create { (observer) -> Disposable in
    return Disposables.create()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值