【发布时间】:2020-03-13 10:55:04
【问题描述】:
我目前正在学习 MVVM 和 RxSwift。在我的主视图控制器中,我有一张我想传入的图像。我成功地使用了 mvc 和 RxSwift,但是因为 MVVM 对我来说是新的。我不知道如何在 MVVM 中实现。这是我的代码。
// This is the work version MVC RxSwift
class GProfilePickAlertVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
private let selectedSubjectPhoto = PublishSubject<UIImage>()
var selectedPhoto: Observable<UIImage> {
return selectedSubjectPhoto.asObservable()
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let editedImage = info[.editedImage] as? UIImage {
self.selectedSubjectPhoto.onNext(editedImage)
dismiss(animated: true, completion: nil)
}
dismiss(animated: true, completion: nil)
}
}
class BasicInfoViewController: UITableViewController {
let profileImageView = GProfileImage(img: #imageLiteral(resourceName: "ic-tab-profile"), renderingMode: .alwaysTemplate)
@objc private func handlePickPhoto() {
let pickPhotoVC = GProfilePickAlertVC()
pickPhotoVC.selectedPhoto.subscribe(onNext: { image in
self.profileImageView.clipsToBounds = true
self.profileImageView.image = image
}).disposed(by: disposeBag)
pickPhotoVC.modalPresentationStyle = .overFullScreen
pickPhotoVC.modalTransitionStyle = .crossDissolve
present(pickPhotoVC, animated: true)
}
}
// This is my MVVM setup
struct BasicInfoViewModel {
let selectedImage: BehaviorRelay<UIImage>
}
class BasicInfoViewController: UITableViewController {
let disposeBag = DisposeBag()
var BasicInfoViewModel: BasicInfoViewModel!
}
【问题讨论】: