Map函数:可以对一个集合类型的所有元素做一个映射操作,其功能就可以替代for、while等的遍历操作。
- 正常Map操作
let nums = [1,2,3,4,5]
let newNums = nums.map { (num) -> Int in
return num * num
}
使用0表示第一个参数所以也能改写成:
let nums = [1,2,3,4,5]
let newNums = nums.map({$0 * $0})
2.使用RxSwift中的Map操作
Observable.from(nums)
.map { (num) -> Int in
return num * num
}
.subscribe { (event) in
print(event.element!)
}
flatMap操作:
struct Student {
var name : Variable<String> //可以直接被订阅
var age : Variable<Int>
}
let stu = Student(name: Variable("小明"), age: Variable(10))
//将对象包装成可订阅的
let student = Variable(stu)
//对分数的
student.asObservable()
.flatMap { (stu:Student) -> Observable<Int> in
return stu.age.asObservable()
}
.subscribe { (event:Event<Int>) in
print(event.element)
}
.disposed(by: disposeBag)
stu.age.value = 11
但修改了student的订阅对象:
let stu2 = Student(name: Variable("小花"), age: Variable(9))
student.value = stu2
stu2.age.value = 10
输出的结果:
Optional(10)
Optional(11)
Optional(9)
Optional(10)
打印了第一个及修改后被订阅对象的所有出现的值,但往往我们需要的只是最新被订阅对象的值所以使用flatMapLatest,初始被订阅对象则使用flatMapFirst。