将数据传递给之前的 viewcontroller VIPER
Pass data to previous viewcontroller VIPER
我在 iOS swift 中使用 VIPER 架构。我有 2 个视图控制器,比方说 A
和 B
。起初我从 A
到 B
,执行一些任务然后从 B
返回到 A
。使用 MVC 或 MVVM,我们可以创建协议并将数据从 B
传输到 A
。但是对于 VIPER,我很困惑。这是我的 VIPER 代码 B,点击后退按钮时:
查看:
@IBAction func backButtonTapped(_ sender: UIButton) {
presenter?.goBack()
}
主持人:
func goBack() {
router.back()
}
路由器:
func back() {
viewController?.navigationController?.popViewController(animated: true)
//here I want to send data back to previous viewcontroller
}
我已经尝试在 Router 的 previous controller 中创建一种方法并通过该方法发送数据,但它无法正常工作路由器没有任何演示者实例或任何其他实例,除了视图。
注意:- 在 Viper 路由器中是单向的。
所以这可能对你有帮助。
- 在当前模块的 VC
中实施 ProtocolDelegate
- 在下一个模块的路由器中创建一个委托变量
- 然后简单地将委托依赖发送到下一个模块的路由器
- 并从下一个模块的路由器调用您的委托方法。
模块 A
final class VCA: SomeProtocolDelegate {
fund someMethod() {
//Your task Action From Module B
}
}
final class ModuleARouter: WireFrameProtocol {
fund gotoModuleB(withView vc: VCA) {
ModuleBRouter.load(onView: vc)
}
}
模块 B
final class ModuleBRouter: WireframeProtocol {
internal weak var delegate: SomeProtocolDelegate?
// Here you can add more argument on load method for delegate
// since in this example i'm send data back ViewController So I didn't create
class func load(onView VC: UIViewController) {
//setup your VIPER protocol and class
if let vCA = VC as? VCA {
router.delegate = vCA
}
}
func backToPreviousModule() {
self.delegate?. someMethod()
}
}
我在 iOS swift 中使用 VIPER 架构。我有 2 个视图控制器,比方说 A
和 B
。起初我从 A
到 B
,执行一些任务然后从 B
返回到 A
。使用 MVC 或 MVVM,我们可以创建协议并将数据从 B
传输到 A
。但是对于 VIPER,我很困惑。这是我的 VIPER 代码 B,点击后退按钮时:
查看:
@IBAction func backButtonTapped(_ sender: UIButton) {
presenter?.goBack()
}
主持人:
func goBack() {
router.back()
}
路由器:
func back() {
viewController?.navigationController?.popViewController(animated: true)
//here I want to send data back to previous viewcontroller
}
我已经尝试在 Router 的 previous controller 中创建一种方法并通过该方法发送数据,但它无法正常工作路由器没有任何演示者实例或任何其他实例,除了视图。
注意:- 在 Viper 路由器中是单向的。 所以这可能对你有帮助。
- 在当前模块的 VC 中实施 ProtocolDelegate
- 在下一个模块的路由器中创建一个委托变量
- 然后简单地将委托依赖发送到下一个模块的路由器
- 并从下一个模块的路由器调用您的委托方法。
模块 A
final class VCA: SomeProtocolDelegate {
fund someMethod() {
//Your task Action From Module B
}
}
final class ModuleARouter: WireFrameProtocol {
fund gotoModuleB(withView vc: VCA) {
ModuleBRouter.load(onView: vc)
}
}
模块 B
final class ModuleBRouter: WireframeProtocol {
internal weak var delegate: SomeProtocolDelegate?
// Here you can add more argument on load method for delegate
// since in this example i'm send data back ViewController So I didn't create
class func load(onView VC: UIViewController) {
//setup your VIPER protocol and class
if let vCA = VC as? VCA {
router.delegate = vCA
}
}
func backToPreviousModule() {
self.delegate?. someMethod()
}
}