首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过另一个ViewController从ViewController获取数据

从一个ViewController获取数据可以通过委托模式或者闭包来实现。

  1. 委托模式: 委托模式是一种常见的在iOS开发中用于传递数据的方式。在这种模式下,我们可以定义一个协议(Protocol),协议中定义了获取数据的方法。然后在源ViewController中,我们可以声明一个委托属性,并在合适的时机将自己设置为委托对象。在目标ViewController中,我们需要实现协议中定义的方法,并在需要获取数据的地方调用委托对象的方法来获取数据。

示例代码如下:

在源ViewController中:

代码语言:swift
复制
protocol DataDelegate: class {
    func getData(data: Any)
}

class SourceViewController: UIViewController {
    weak var delegate: DataDelegate?

    // 在某个事件触发时调用委托方法
    func sendData() {
        let data = // 获取数据的逻辑
        delegate?.getData(data: data)
    }
}

在目标ViewController中:

代码语言:swift
复制
class TargetViewController: UIViewController, DataDelegate {
    // 实现委托方法
    func getData(data: Any) {
        // 处理获取到的数据
    }

    // 在需要获取数据的地方调用源ViewController的发送数据方法
    func fetchData() {
        let sourceVC = // 获取源ViewController的实例
        sourceVC.delegate = self
        sourceVC.sendData()
    }
}
  1. 闭包: 闭包是一种轻量级的传递数据的方式,它可以在一个ViewController中定义一个闭包属性,并在需要获取数据的地方调用闭包来传递数据。在目标ViewController中,我们可以通过闭包参数来接收数据。

示例代码如下:

在源ViewController中:

代码语言:swift
复制
class SourceViewController: UIViewController {
    var dataClosure: ((Any) -> Void)?

    // 在某个事件触发时调用闭包传递数据
    func sendData() {
        let data = // 获取数据的逻辑
        dataClosure?(data)
    }
}

在目标ViewController中:

代码语言:swift
复制
class TargetViewController: UIViewController {
    // 在需要获取数据的地方设置闭包,并处理获取到的数据
    func fetchData() {
        let sourceVC = // 获取源ViewController的实例
        sourceVC.dataClosure = { data in
            // 处理获取到的数据
        }
        sourceVC.sendData()
    }
}

以上是从一个ViewController获取数据的两种常见方式,根据具体的需求和场景选择合适的方式来实现数据的传递。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券