开发者社区 问答 正文

swift Xcode中Prepare()的反义词是什么

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == Storyboards.AuthenticationStoryboard.Segues.forgotPasswordSegue {
            guard let navigationController = segue.destination as? UINavigationController else { return }
            guard let forgotPasswordViewController = navigationController.viewControllers.first as? ForgotPasswordEmailViewController else { return }
            forgotPasswordViewController.viewModel.email.value = viewModel.model.email.value
        }
        if segue.identifier == Storyboards.AuthenticationStoryboard.Segues.showPhoneViewSegue {
            guard let destinationViewController = segue.destination as? EnterPhoneViewController else { return }
            destinationViewController.successFallbackViewController = self
        }
    }

这是当前被覆盖的准备功能。据我所知,这个函数是在执行segue之前调用的。类似地,是否有任何函数可以编写,以便在完成SEGUE后执行指令。

展开
收起
游客5akardh5cojhg 2019-12-11 18:37:02 733 分享 版权
阿里云 AI 助理回答

在iOS开发中,如果你希望在完成Segue(过渡)后执行某些操作,你可以利用UIViewController的生命周期方法或者自定义回调。由于SwiftUI和UIKit有所不同,这里我假设你是在使用UIKit。以下是一些常见的做法:

  1. override viewDidAppear(_:): 在目标ViewController中覆盖viewDidAppear(_:)方法。这个方法在视图控制器的视图被添加到窗口层级并可见时调用。这是一个执行Segue后逻辑的好地方。
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // 在这里执行Segue完成后需要进行的操作
}
  1. Delegate模式: 如果你需要从目标ViewController向原始ViewController传递信息或通知它某些操作已完成,可以使用代理(Delegate)模式。定义一个协议,并让你的原始ViewController遵循这个协议。然后,在目标ViewController中设置代理并在适当的时候调用代理方法。

  2. Notification Center: 使用NSNotificationCenter(现在称为NotificationCenter)来发送通知。在完成Segue后的ViewController中发送通知,原始ViewController可以注册监听这些通知并作出响应。

  3. Closure(闭包)或Block: 你可以在准备ForSegue时传递一个闭包给目标ViewController。这样,目标ViewController在完成其任务后可以直接调用该闭包。

示例代码(使用闭包):

// 假设在ForgotPasswordEmailViewController中
var onCompletion: (() -> Void)?

// 在ForgotPasswordEmailViewController中的某个合适位置调用闭包
onCompletion?()

// 修改prepare(for:sender:)以传递闭包
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == Storyboards.AuthenticationStoryboard.Segues.forgotPasswordSegue,
       let navigationController = segue.destination as? UINavigationController,
       let forgotPasswordViewController = navigationController.viewControllers.first as? ForgotPasswordEmailViewController {
        forgotPasswordViewController.viewModel.email.value = viewModel.model.email.value
        forgotPasswordViewController.onCompletion = {
            // 这里是Segue完成后要执行的代码
        }
    }
}

选择哪种方法取决于你的具体需求,比如是否需要双向通信、是否涉及多个对象之间的协调等。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: