如何实现 UIViewController 之间的数据传递?

简介: 如何实现 UIViewController 之间的数据传递?

在 iOS 中,有多种方式可以实现 UIViewController 之间的数据传递。以下是一些常用的方法:

  1. 属性传递:

    • 在目标 UIViewController 中定义一个属性,并在源 UIViewController 中设置该属性的值。
    • 示例:

      // 在目标 UIViewController 中定义属性
      class DestinationViewController: UIViewController {
             
          var receivedData: String?
          // ...
      }
      
      // 在源 UIViewController 中设置属性值
      let destinationVC = DestinationViewController()
      destinationVC.receivedData = "Hello from source VC"
      
  2. 构造函数传递:

    • 在目标 UIViewController 的构造函数中添加参数,并在创建目标视图控制器的时候传递数据。
    • 示例:

      class DestinationViewController: UIViewController {
             
          var receivedData: String?
      
          // 构造函数接收数据
          init(data: String) {
             
              super.init(nibName: nil, bundle: nil)
              self.receivedData = data
          }
      }
      
      // 创建目标 UIViewController 时传递数据
      let destinationVC = DestinationViewController(data: "Hello from source VC")
      
  3. 委托模式:

    • 使用委托模式,源 UIViewController 成为目标 UIViewController 的委托,并定义委托方法传递数据。
    • 示例:

      protocol DataDelegate: AnyObject {
             
          func sendData(data: String)
      }
      
      class SourceViewController: UIViewController {
             
          weak var delegate: DataDelegate?
      
          // 在适当的时机调用委托方法
          func sendDataToDestination() {
             
              delegate?.sendData(data: "Hello from source VC")
          }
      }
      
      class DestinationViewController: UIViewController, DataDelegate {
             
          // 实现委托方法接收数据
          func sendData(data: String) {
             
              print("Received data: \(data)")
          }
      
          // 在源 UIViewController 中设置委托
          let sourceVC = SourceViewController()
          sourceVC.delegate = self
      
  4. 通知中心:

    • 使用 NotificationCenter 发送通知,源 UIViewController 发送通知,目标 UIViewController 监听通知。
    • 示例:

      // 在源 UIViewController 中发送通知
      NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Hello from source VC"])
      
      // 在目标 UIViewController 中监听通知
      NotificationCenter.default.addObserver(self, selector: #selector(handleDataNotification(_:)), name: NSNotification.Name("DataNotification"), object: nil)
      
      @objc func handleDataNotification(_ notification: Notification) {
             
          if let data = notification.userInfo?["data"] as? String {
             
              print("Received data: \(data)")
          }
      

这些方法可以根据实际需求选择使用,通常会根据具体场景和数据传递的复杂程度来选择最合适的方式。每种方式都有其适用的场景,开发者可以根据需求选择最符合项目架构和代码风格的方法。

相关文章
|
10月前
|
存储 开发工具 数据安全/隐私保护
iOS各个证书生成细节
在iOS开发中,证书和标识符的配置至关重要。CSR(证书签名请求)由私钥生成,提交给苹果获取`.cer`证书。P12文件由`.cer`证书和私钥导出,用于开发环境。App ID确保应用唯一性。流程包括创建App ID、生成CSR、申请证书并导出P12。主P12和推送P12可使用不同CSR。
487 3
|
移动开发 Java Android开发
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
2653 0
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
|
SQL Java 数据库连接
基于QueryWrapper的查询,查询出名字中带有o的,存款大于等于1000元的人的id、username、info、balance字段
基于QueryWrapper的查询,查询出名字中带有o的,存款大于等于1000元的人的id、username、info、balance字段
|
人工智能 Serverless 数据处理
极速启动,函数计算弹性降本能力再升级
在数字化转型的大潮中,云计算成为推动创新和优化业务流程的关键力量。作为阿里巴巴集团的核心产品之一,函数计算(Function Compute)引领着 Serverless 计算的新时代。本文将深入探讨函数计算如何通过技术革新实现提效降本,以及其在 AI 业务、数据处理和 Web 应用等多个领域的广泛应用。
552 32
|
开发者 iOS开发
no identity found Command CodeSign failed with a nonzero exit code
no identity found Command CodeSign failed with a nonzero exit code
700 0
手势代理 shouldBeRequiredToFailByGestureRecognizer 和 shouldRequireFailureOfGestureRecognizer 的区别
手势代理 shouldBeRequiredToFailByGestureRecognizer 和 shouldRequireFailureOfGestureRecognizer 的区别
454 10
|
缓存 监控 NoSQL
Laravel 缓存标签:提高应用性能的利器
【8月更文挑战第31天】
205 0
|
JSON 数据处理 API
在Swift中,数据处理和网络请求
在Swift中,数据处理和网络请求
358 4
|
JavaScript 前端开发 API
vue3中Pinia的使用总结
vue3中Pinia的使用总结
|
数据采集 运维 监控
分布式智能微电网的体系结构操作系统
分布式智能微电网的体系结构操作系统
673 0
分布式智能微电网的体系结构操作系统