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로 메모리에서 해제시켜주면 된다.