Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode Swift中的可继承@IBInspectable变量?_Xcode_Swift - Fatal编程技术网

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,事实上不是,现在它抱怨基变量没有初始化,我在进一步实验中的尝试大多以编译器崩溃而告终。好了,好奇的话到此为止。:)