gpt4 book ai didi

model-view-controller - 在 Swift 中传递数据

转载 作者:IT王子 更新时间:2023-10-29 05:20:21 26 4
gpt4 key购买 nike

我一直在寻找这个问题的答案,但只找到了 segues 的答案。

我有一个 viewController1,它带有一个按钮,可以转到 viewController2。没有这方面的代码,我通过界面生成器设置它。在 viewController2 上,我有一个按钮可以自行关闭

 self.dismissViewControllerAnimated(true, completion, nil)

我想在 View 关闭时将字符串从 viewController2 传回 viewController1。我该怎么做呢?另外,我正在使用 swift。

提前致谢!

最佳答案

有两种常见的模式,这两种模式都消除了 viewController2 明确了解 viewController1 的需要(这对于可维护性非常好):

  1. 为您的 viewController2 创建一个委托(delegate)协议(protocol),并将 viewController1 设置为委托(delegate)。每当您想将数据发送回 viewController1 时,让 viewController2 发送“委托(delegate)”数据

  2. 将闭包设置为允许传递数据的属性。 viewController1 将在显示 viewController2 时在 viewController2 上实现该闭包。每当 viewController2 有数据要传回时,它就会调用闭包。感觉这个方法更像“swift”。

这是#2 的一些示例代码:

class ViewController2 : UIViewController {
var onDataAvailable : ((data: String) -> ())?

func sendData(data: String) {
// Whenever you want to send data back to viewController1, check
// if the closure is implemented and then call it if it is
self.onDataAvailable?(data: data)
}
}

class ViewController1 : UIViewController {
func doSomethingWithData(data: String) {
// Do something with data
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
// When preparing for the segue, have viewController1 provide a closure for
// onDataAvailable
if let viewController = segue.destinationViewController as? ViewController2 {
viewController.onDataAvailable = {[weak self]
(data) in
if let weakSelf = self {
weakSelf.doSomethingWithData(data)
}
}
}
}
}

关于model-view-controller - 在 Swift 中传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24318480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com