1. 개요
- RxSwift는 편리하고 코드를 간단하기 위한 많은 함수들을 제공한다.(Operator)
1) just
- 원래 기본 문법에서는 Create로 함수 형태를 만들고 seal.onNext에 반환하는 데이터를 넣어줘야 했지만 이를 간략하게 표현하는 방법
- 들어온 데이터를 그대로 seal.onNext로 보내는 것과 같은 결과
- 배열도 그대로 보낼 수 있다.
Observable.just("Hello World")
.subscribe(onNext: { str in
print(str)
})
.disposed(by: disposeBag)
[결과]
Hello World
Observable.just(["Hello", "World"])
.subscribe(onNext: { arr in
print(arr)
})
.disposed(by: disposeBag)
[결과]
["Hello", "World"]
2) from
- 배열 형태로 들어온 데이터를 차례대로 하나씩 onNext로 넣어준다.
Observable.from(["RxSwift", "In", 4, "Hours"])
.subscribe(onNext: { obj in
print(obj)
})
.disposed(by: disposeBag)
[결과]
RxSwift
In
4
Hours
3) map
- 중간에 map을 사용하는 경우 단계에 맞게 map이 실행된다.
- 이렇게 체이닝을 이용하여 흐름에 맞게 내려가는 구조를 Stream이라고 한다.
Observable.just("Hello")
.map { str in "\(str) RxSwift" }
.subscribe(onNext: { str in
print(str)
})
.disposed(by: disposeBag)
[결과]
Hello RxSwift
Observable.from(["with", "곰튀김"])
.map { $0.count }
.subscribe(onNext: { str in
print(str)
})
.disposed(by: disposeBag)
[결과]
4
3
4) filter
- 필터에 걸리는 것만 아래로 내려가고 나머지는 내려가지 않는다.
Observable.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
.filter { $0 % 2 == 0 }
.subscribe(onNext: { n in
print(n)
})
.disposed(by: disposeBag)
[결과]
2
4
6
8
10
5) 응용
- 이미지를 다운받고 처리하는 것을 just, map, filter를 이용해서 만들어보자.
- "800x600" => "800/600" => "https://picsum.photos/800/600/?random" => URL? => filter에서 nil인지 확인
=> URL! =>Data => UIImage? => 데이터 적용
Observable.just("800x600")
.map { $0.replacingOccurrences(of: "x", with: "/") }
.map { "https://picsum.photos/\($0)/?random" }
.map { URL(string: $0) }
.filter { $0 != nil }
.map { $0! }
.map { try Data(contentsOf: $0) }
.map { UIImage(data: $0) }
.subscribe(onNext: { image in
self.imageView.image = image
})
.disposed(by: disposeBag)
'앱 개발자 역량 > IOS' 카테고리의 다른 글
RxSwift ] 5. Scheduler, Side Effect (0) | 2019.07.19 |
---|---|
RxSwift ] 4. 다양한 operator 확인 방법 (0) | 2019.07.16 |
RxSwift ] 2. Disposable (0) | 2019.07.13 |
RxSwift ] 1. 개요 및 Observable (0) | 2019.07.13 |
ios ]AppStore 배포하기 (0) | 2019.07.09 |