Xcode Swift中的可继承@IBInspectable变量?
假设我在基本Xcode Swift中的可继承@IBInspectable变量?,xcode,swift,Xcode,Swift,假设我在基本@IBDesignable类中创建了一个@IBInspectable变量 现在,该属性不使属性在派生类中可检查。这显然是出于设计——您希望能够创建一个派生类,该类根据自己的逻辑设置基本属性,并禁止用户触摸它们 但是,假设我想在派生类中检查相同的属性。问题是,@IBInspectable仅与变量定义一起使用,因此似乎需要我重新定义变量,即使已经提供了定义(这就是我错过Objective-C的地方:如果您知道自己在做什么,您可以在不接触实现的情况下更改类接口) 这有以下缺点:不能重写基本
@IBDesignable
类中创建了一个@IBInspectable
变量
现在,该属性不使属性在派生类中可检查。这显然是出于设计——您希望能够创建一个派生类,该类根据自己的逻辑设置基本属性,并禁止用户触摸它们
但是,假设我想在派生类中检查相同的属性。问题是,@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
}
}
问题:有没有一种速记语法可以做到这一点?
(如果没有,如果其他人喜欢这个想法,我可能会为苹果的魔术师们申请一个雷达。)注意:从Xcode 6 beta 3开始,这是固定的:Interface Builder还可以在超类中看到可检查的属性 关于这个问题,苹果论坛上有很多讨论 对于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
}
}
听起来很像。如果你只提供一个属性观察者(例如,empty
didSet
),它能工作吗?@rickster,哦,谢谢,我不知道我可以省略getter和setter。已经好多了@rickster,事实上不是,现在它抱怨基变量没有初始化,我在进一步实验中的尝试大多以编译器崩溃而告终。好了,好奇的话到此为止。:)