Swift-Map操作

Map函数:可以对一个集合类型的所有元素做一个映射操作,其功能就可以替代for、while等的遍历操作。

  1. 正常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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。