启用两个类之间的双向通信

时间:2017-05-31 06:52:58

标签: ios swift uiview delegates protocols

所以我在touchableView中有自定义视图ViewControllertouchableView通过委托协议(ViewControllerViewController)通知delegate其属性发生了变化。

touchableView更改ViewController的属性的最佳方法是什么(反之亦然)? 有没有办法在两个类之间创建双向委托关系?

1 个答案:

答案 0 :(得分:1)

<强>简单地:

假设您已在touchableView中拥有ViewController个实例,您应该能够设置-or get- / call其属性和方法。

例如,假设您在touchableView class中有以下方法:

class func fromNib() -> TouchableView {
    return Bundle.main.loadNibNamed(String(describing: self), owner: nil, options: nil)![0] as! TouchableView
}

你应该能够:

let touchableView = TouchableView.fromNib()

因此:

// for example
touchableView.myProperty = "Hello"

我假设TouchableView有一个名为myProperty的字符串属性...

<强>注:

出于某种原因,我建议在TouchableView中实现一些属性观察器

  

财产观察员观察并回应房产的变化   值。每次物业的价值都会调用物业观察员   设置,即使新值与属性的当前值相同   值。

在自定义类中实现它们可能是有用的。为清楚起见,我们考虑 - 例如 - 如果编辑myProperty的值应该影响视图的背景颜色,则可以实现为:

var myProperty: String = "Initial Value" {
    willSet {
        print("About to set value to:  \(newValue)")
    }
    didSet {
        backgroundColor = UIColor.red
    }
}

进一步阅读:

如果您正在寻找双向绑定的高级方法(实现MVVM),您可能需要检查this article

我还建议看看一些对这种方法非常有用的框架,例如RxSwift,对于更简单的框架,您可能需要检查ReactiveKit/Bond。< / p>