所以我在touchableView中有一个自定义视图ViewControllertouchableView通过委托协议(ViewControllerViewController)将其属性的更改通知给delegate

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

最佳答案

只需:

假设您已经在touchableView中具有ViewController实例,则应该可以设置-或get- /调用其属性和方法。

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

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

10-07 19:54