在 iOS 中,有多种方式可以实现 UIViewController
之间的数据传递。以下是一些常用的方法:
属性传递:
- 在目标
UIViewController
中定义一个属性,并在源UIViewController
中设置该属性的值。 示例:
// 在目标 UIViewController 中定义属性 class DestinationViewController: UIViewController { var receivedData: String? // ... } // 在源 UIViewController 中设置属性值 let destinationVC = DestinationViewController() destinationVC.receivedData = "Hello from source VC"
- 在目标
构造函数传递:
- 在目标
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")
- 在目标
委托模式:
- 使用委托模式,源
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
- 使用委托模式,源
通知中心:
- 使用
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)") }
- 使用
这些方法可以根据实际需求选择使用,通常会根据具体场景和数据传递的复杂程度来选择最合适的方式。每种方式都有其适用的场景,开发者可以根据需求选择最符合项目架构和代码风格的方法。