如何解决如何快速调用另一个类中的函数
我有一个MainCoordinator类,该类扩展了NSObject并具有以下方法:
init(presenter: UINavigationController) {
self.presenter = presenter
}
func start() {
let mainViewController = MainViewController(userDefaults: UserDefaults.standard)
presenter.pushViewController(mainViewController,animated: false)
self.mainViewController = mainViewController
subscribetoEvents()
}
private func subscribetoEvents() {
if let viewmodel = mainViewController?.viewmodel {
viewmodel.showOptions.subscribe(onNext: { [weak self] in
self?.showOptions()
}).disposed(by: disposeBag)
}
}
private func showOptions() {
let actionSheet = UIAlertController(title: "Would you like to open the Camera or select one from your photo library?",message: nil,preferredStyle: .actionSheet)
let cameraAction = UIAlertAction(title: "Use the Camera",style: .default) { [weak self] (_) in
self?.openCameraScanner()
}
let photoLibraryAction = UIAlertAction(title: "Open Photo Library",style: .default) { [weak self] (_) in
self?.openPhotoLibrary()
}
let cancelAction = UIAlertAction(title: "Cancel",style: .cancel,handler: nil)
actionSheet.addAction(cameraAction)
actionSheet.addAction(photoLibraryAction)
actionSheet.addAction(cancelAction)
mainViewController?.present(actionSheet,animated: true,completion: nil)
}
}
MainViewController是扩展UIViewController的类,它具有以下按钮:
lazy private var sButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle('options',for: .normal)
button.backgroundColor = UIColor.yellow
button.roundedCorners(radius: 25)
button
.rx
.tap
.bind(to: self.viewmodel.showOptions)
.disposed(by: self.disposableBag)
return button
}()
这是它的初始化方法
init(userDefaults: UserDefaults) {
viewmodel = Mainviewmodel(userDefaults: userDefaults)
super.init(nibName: nil,bundle: nil)
}
self.viewmodel.showOptions方法的类型为 PublishSubject ,每当我点击sButton时,我都希望激活MainCoordinator类中的showOptions方法。
import RxSwift
class Mainviewmodel {
let disposeBag = disposeBag()
//Subjects
let showScanoptions = PublishSubject<Void>()
..
init(networkable: Networkable,userDefaults: UserDefaults) {
self.networkable = networkable
self.userDefaults = userDefaults
loginResponse.value = userDefaults.loginResponse
login.subscribe(onNext: { [weak self] in
guard let username = self?.email.value,let password = self?.password.value else { return }
self?.isLoading.onNext(true)
let loginInputs = LoginInputs(email: username,password: password)
self?.networkable.login(loginInputs: loginInputs) { loginResponse in
guard let loginResponse = loginResponse else {
self?.errorSubject.onNext(nil)
self?.isLoading.onNext(true)
return
}
self?.userDefaults.loginResponse = loginResponse
self?.loginResponse.value = loginResponse
}
},onError: { [weak self] error in
self?.isLoading.onNext(false)
self?.errorSubject.onNext(error)
}).disposed(by: disposeBag)
}
}
这怎么可能实现?
感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。