假设您有两个视图 view1 和 view2。
例如,view2 中的某些数据发生了更改,您需要将此数据传递给view1。我会用委托模式来做到这一点。设置如下:
protocol View2Delegate {
func didChangeSomeData(data: String)
}
现在在view2
class View2: UIView {
var delegate: View2Delegate?
var text: String = String() {
didSet {
self.delegate.didChangeSomeData(data: text)
}
}
}
在view1
class View1: UIView, View2Delegate {
var textToChange: String = String()
func didChangeSomeData(data: String) {
// Do whatever you want with that changed data from view2
textToChange = data
}
}
在你的viewController
class MyViewController: UIViewController {
var: view1 = View1()
var: view2 = View2()
func viewDidLoad() {
super.viewDidLoad()
view2.delegate = view1
}
现在,如果您不想将view1 和view2 耦合,您可以通过ViewController 中view2 的相同模式更改进行侦听,然后通过属性将其直接传递给view1访问者。
class MyViewController: UIViewController, View2Delegate {
var: view1 = View1()
var: view2 = View2()
func viewDidLoad() {
super.viewDidLoad()
view2.delegate = self
}
func didChangeSomeData(data: String) {
view1.textToChange = data
}
Apple's Documentation 中有关协议的更多信息
更新
您也可以使用Key Value Observing 模式。你可以这样设置:
class MyViewController: UIViewController {
var view1 = View1()
var view2 = View2()
override func viewDidLoad() {
super.viewDidLoad()
let observation = view2.observe(\.text) { (observed, change) in
if let newValue = change.newValue {
view1.textToChange = newValue
}
}
}
}