1. just()方法

  • 该方法通过传入一个默认值来初始化
  • 下面样例我们显示地标注出了observable的类型为Observable, 即指定了这个Observable所发出的事件携带的数据类型必须是Int类型的
let observable = Observable<Int>.just(5)

2. of()方法

  • 该方法可以接受可变数量的参数(必需是同类型的)
  • 下面样例中没有显式的声明出Observable的泛型类型, swift会自动推断类型
let observable = Observable.of("A", "B", "C")

3. from()方法

  • 该方法需要一个数组参数
  • 下面样例中数据里的元素就会被当做这个Observable所发出event携带的数据内容, 最终效果通上面的of()样例是一样的
let observable = Observable.from(["A", "B", "C"])

4. empty()方法

该方法创建一个空内容的Observable序列

let observable = Observable<Int>.empty()

5. never()方法

  • 该方法创建一个永远不会发出Event(也不会终止)的Observable序列
let observable = Observable<Int>.never()

6. error()方法

  • 该方法创建一个不做任何操作, 而是直接发送一个错误的Observable序列
enum MyError: Error {
case A
case B
} let observable = Observable<Int>.error(MyError.A)

7. range()方法

  • 该方法通过指定起始和结束数值, 创建一个以这个范围内所有值作为初始值的Observable序列
  • 下面样例中, 两种方法创建的Observable序列都是一样的
//使用range()
let observable = Observable.range(start: 1, count: 5) //使用of()
let observable = Observable.of(1, 2, 3 ,4 ,5)

8. repeatElement()方法

  • 该方法创建一个可以无限发出给定元素的Event的Observable序列(永不终止)
let observable = Observable.repeatElement(1)

9. generate()方法

  • 该方法创建一个只有当提供的所有的判断条件都为true的时候, 才会给出动作的Observable序列
  • 下面样例中, 两种方法创建的Observable序列都是一样的
//使用generate()方法
let observable = Observable.generate(
initialState: 0,
condition: { $0 <= 10 },
iterate: { $0 + 2 }
) //使用of()方法
let observable = Observable.of(0 , 2 ,4 ,6 ,8 ,10)

10. create()方法

  • 该方法接受一个block形式的参数, 任务是对每一个过来的订阅进行处理
//这个block有一个回调参数observer就是订阅这个Observable对象的订阅者
//当一个订阅者订阅这个Observable对象的时候,就会将订阅者作为参数传入这个block来执行一些内容
let observable = Observable<String>.create{observer in
//对订阅者发出了.next事件,且携带了一个数据"hangge.com"
observer.onNext("hangge.com")
//对订阅者发出了.completed事件
observer.onCompleted()
//因为一个订阅行为会有一个Disposable类型的返回值,所以在结尾一定要returen一个Disposable
return Disposables.create()
} //订阅测试
observable.subscribe {
print($0)
}

11. deferred()方法

  • 该方法相当于创建一个Observable工厂, 通过传入一个block来执行延迟Observable序列创建的行为, 而这个block里就是真正的实例化序列对象的地方
//用于标记是奇数、还是偶数
var isOdd = true //使用deferred()方法延迟Observable序列的初始化,通过传入的block来实现Observable序列的初始化并且返回。
let factory : Observable<Int> = Observable.deferred { //让每次执行这个block时候都会让奇、偶数进行交替
isOdd = !isOdd //根据isOdd参数,决定创建并返回的是奇数Observable、还是偶数Observable
if isOdd {
return Observable.of(1, 3, 5 ,7)
}else {
return Observable.of(2, 4, 6, 8)
}
} //第1次订阅测试
factory.subscribe { event in
print("\(isOdd)", event)
} //第2次订阅测试
factory.subscribe { event in
print("\(isOdd)", event)
}

12. interval()方法

  • 这个方法创建的Observable序列每隔一段设定的时间, 会发出一个索引数的元素, 而且会一直发送下去
let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
observable.subscribe { event in
print(event)
}

13. timer()方法

  • 这个方法有两种用法, 一种是创建的Observable序列在经过设定的一点时间后, 产生唯一的一个元素
//5秒种后发出唯一的一个元素0
let observable = Observable<Int>.timer(5, scheduler: MainScheduler.instance)
observable.subscribe { event in
print(event)
}
  • 另一种是创建的Observable序列在经过设定的一段时间后, 每隔一段时间产生一个元素
//延时5秒种后,每隔1秒钟发出一个元素
let observable = Observable<Int>.timer(5, period: 1, scheduler: MainScheduler.instance)
observable.subscribe { event in
print(event)
}

学习参考, 感谢大神的无私奉献

最新文章

  1. C语言 插入排序 算法导论chapter2
  2. 病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史
  3. Webstorm 10 for mac osx 注册机,序列号,kegen
  4. golang: 常用数据类型底层结构分析
  5. C++11的模板新特性-变长参数的模板
  6. SQLite数据库增删改查操作
  7. 解决input之间的空隙
  8. Java基础-布局
  9. TC SRM 663 div2 B AABB 逆推
  10. mysql grant 示例
  11. MyReport报表引擎2.0.0.0新功能
  12. flink学习
  13. git reset的用法
  14. ASP.NET MVC4在部署IIS后,运行时显示的是整个Web的目录列表
  15. zend studio mac
  16. xubuntu无法进图形界面问题
  17. java swing 制作一个登陆界面,亲测有效
  18. 一些你可能需要的okhttp实现
  19. 使用fork并发处理多个client的请求和对等通信p2p
  20. jar/war/ear文件的区别

热门文章

  1. zabbix--监控MySQL主从状态
  2. Chrome出现“浏览器由所属组织管理”如何解决
  3. Linux:使用awk命令获取文本的某一行,某一列;sed插入指定的内容到指定文件中
  4. mysql免安装版本测试(mysql-5.7.18-winx64)
  5. VisualVM的插件中心已经迁移至GitHub
  6. ASP.NET Core Docker Nginx分权,多网站部署
  7. (尚033)Vue_案例_slot(组件间的通信4:slot)
  8. utility.py:61: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array in
  9. 使用 Python 和 Flask 设计 RESTful API
  10. FileInputFormat 的实现之TextInputFormat