RxSwift실제사용해본예시1
작성일
버튼을 눌러 뭘 추가하는 뷰에서
ex) PhotosCollectionViewController.swift
// 구독할 개체를 생성해준다.
// 여기선 UIImage 타입이여서 타입을 넣어준 것이다.
private let selectedPhotoSubject = PublishSubject<UIImage>()
// 이뷰컨이나 다른 뷰컨에 있는걸 관찰할수있게한다? 잘모르겠다.
var selectedPhoto: Observable<UIImage> {
return selectedPhotoSubject.asObservable()
}
이런 식으로 변수를 추가해준다.
VC2 -> VC1으로 데이터를 넘길떄 VC2에 담는것 처럼? 하면 된다.
그리고
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let selectedAsset = self.images[indexPath.row]
PHImageManager.default().requestImage(for: selectedAsset, targetSize: CGSize(width: 300, height: 300), contentMode: .aspectFit, options: nil) { [weak self] image, info in
guard let info = info else { return }
//이미지 저하 여부
let isDegradedImage = info["PHImageResultIsDegradedKey"] as! Bool
// 저하된 이미지가 아니라면 넣기
if !isDegradedImage {
if let image = image {
self?.selectedPhotoSubject.onNext(image)
self?.dismiss(animated: true)
}
}
}
}
이런 식으로 cell 이미지가 클릭 되었을때, 검사를 마치고
self?.selectedPhotoSubject.onNext(image)
self?.dismiss(animated: true)
이런식으로 값을 담아주고, dismiss해주면
ViewController.swift 사용할뷰에서
let disposeBag = DisposeBag() 버릴가방을 만들고
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let navC = segue.destination as? UINavigationController,
let photosCVC = navC.viewControllers.first as? PhotosCollectionViewController else { fatalError("Segue 에러")}
photosCVC.selectedPhoto.subscribe { [weak self] photo in
print("===\(photo)===")
self?.photoImageView.image = photo
}.disposed(by: disposeBag)
}
이런식으로 selectedPhoto.subscribe를 사용해서 VC에 있는 photoImageView의 이미지에 넘겨준 image 여기선 photo를 넣어주고, 그다음 disposed로 메모리에서 해제시켜주면 된다.