Swift willSet/didSet分配?

Swift willSet/didSet分配?,swift,didset,Swift,Didset,我想通过使用didSet/willSetAPI来观察类中两个属性的变化。然而,我想保持我的属性减速部分干净,所以我想为这个逻辑的实现提供单独的函数 现在我有这样的事情: var myProperty: SomeType { didSet { handleDidSetMyProperty() } } var myProperty: SomeType { didSet = handleDidSetMyProperty } 然而,这占用了5行,如果你有更多这

我想通过使用
didSet
/
willSet
API来观察类中两个属性的变化。然而,我想保持我的属性减速部分干净,所以我想为这个逻辑的实现提供单独的函数

现在我有这样的事情:

var myProperty: SomeType {
    didSet {
        handleDidSetMyProperty()
    }
}
var myProperty: SomeType {
    didSet = handleDidSetMyProperty
}
然而,这占用了5行,如果你有更多这样的属性,这是相当多的。如果我能将其限制为3,那就太好了,例如:

var myProperty: SomeType {
    didSet {
        handleDidSetMyProperty()
    }
}
var myProperty: SomeType {
    didSet = handleDidSetMyProperty
}
在Swift中有没有一种方法可以将函数/闭包分配给属性观察者?

没有,您不能。在雨燕中看到 编程语言

在“变量声明语法”中,您将发现

didSet-clause → attributes­opt ­didSet­ setter-name­­opt ­­code-block­ didSet子句→ 属性-opt-didSet-setter名称-opt-code块- 在“代码块的语法”中

code-block → {­ statements­opt }­ 代码块→ {-statements-opt} i、 e.
didSet
关键字后面只能跟一个代码块(带
是的,这是一个非常明显的解决方案,但它与我对干净代码的定义相去甚远;)我支持@user3581248的这种清洁感,这会很酷:)用五行代码正确地完成它。“减少线”是荒谬的。只使用标准的习惯用法。你真的应该用空行来介绍每一块“语法糖”吗?没关系。很抱歉,这是一种判断,但有两件事最重要—(a)编译代码的大小,和(b)所述代码的可读性。如果在占用相同内存空间的情况下,5行代码可以缩减到3行,或者可以放大到50行,那么同样,代码可读性是您应该关心的全部,包括空格和行数。(顺便说一句,这类问题属于代码审查((不在此)。