Swift中可继承的@IBInspectable var?

ily*_* n. 5 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
}
}
Run Code Online (Sandbox Code Playgroud)

问题:是否有简化的语法?

(如果没有,并且如果其他人喜欢这个主意,我可能会向苹果的魔术师发出警告。)

mxb*_*mxb 0

注意:从 Xcode 6 beta 3 开始,此问题已修复:Interface Builder 还可以在超类中看到可检查的属性

苹果论坛上有一个关于这个问题的问题。

didSet对于 Xcode 6 beta 2 及更低版本:使用如下方式缩短代码,它应该可以工作:

// 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
}
}
Run Code Online (Sandbox Code Playgroud)