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