Swift中可继承的@IBInspectable变量?

时间:2014-07-01 17:54:02

标签: xcode swift

假设我在基础@IBInspectable中创建了@IBDesignable变量。

现在,该属性不会使派生类中的属性可检查。这显然是设计的 - 您希望能够创建一个派生类,根据自己的逻辑设置基本属性,并禁止用户触摸它们。

但是,假设我想在派生类中检查相同的属性。问题是,@IBInspectable仅用于变量定义,所以它似乎要求我重新定义变量,即使已经提供了定义(我错过了Objective-C:你可以如果您知道自己在做什么,更改类接口而不触及实现。

这有以下缺点:您无法覆盖基本存储变量,并且需要提供显式的getter和setter。因此,我提出的最干净的代码是:

// derived class
@IBInspectable override var borderWidth: CGFloat {
get {
    return super.borderWidth
}
set {
    super.borderWidth = newValue
}
}

// base class
@IBInspectable var borderWidth: CGFloat {
set {
    layer.borderWidth = newValue
    // this can be a very complicated setter, of course
}
get {
    return layer.borderWidth
    // this can be a very complicated getter, of course
}
}

问题:是否有简写语法?

(如果没有,如果其他人喜欢这个想法,我可能会为Apple的魔术师提供雷达。)

1 个答案:

答案 0 :(得分:0)

注意:从Xcode 6 beta 3开始,这是固定的:Interface Builder在超类中也可以看到可检测的属性

此问题的Apple论坛中有question

对于Xcode 6 beta 2及更低版本:使用didSet按如下方式缩短代码,它应该有效:

// derived class
@IBInspectable override var borderWidth: CGFloat { didSet{} }

// base class
@IBInspectable var borderWidth: CGFloat {
set {
    layer.borderWidth = newValue
    // this can be a very complicated setter, of course
}
get {
    return layer.borderWidth
    // this can be a very complicated getter, of course
}
}