Vas*_*mil 35 properties ios swift
例如,有头等舱
public class MyBaseButton: UIButton {
public var weight: Double = 1.0
public var text: String? {
get {
return self.titleForState(.Normal)
}
set {
return self.setTitle(newValue, forState: .Normal)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并继承了类:
public class SomeButton: SomeBaseButton {
override public var text: String? = "text"
override public var weight: Double = 2.0
}
Run Code Online (Sandbox Code Playgroud)
所以,逻辑是SomeClass定义自己的文本和权重.但是我收到了错误:
对于文本:" 无法覆盖存储的属性'文本' "
对于重量:" 不能覆盖存储的属性'权重' "
Ste*_*ntz 53
有趣的是,这在纯Swift类中运行得很好.例如,这可以按预期工作:
public class FooButton {
public var weight: Double = 1.0
}
public class BarButton: FooButton {
override public var weight: Double = 2.0
}
Run Code Online (Sandbox Code Playgroud)
它不适合你的原因是因为你正在使用Objective-C类:因为它UIButton是一个Objective-C类,它的所有子类也都是.因此,规则似乎有点不同.
Xcode 6.3实际上提供了更多信息.它显示以下两个错误:
Getter for"weight"覆盖Objective-C方法"权重"来自超类"FooButton"Setter for"weight"覆盖Objective-C方法"setWeight:"来自超类"Foobutton"
由于以下工作...
public class BarButton: FooButton {
override public var weight: Double {
get {
return 2.0
}
set {
// Do Nothing
}
}
}
Run Code Online (Sandbox Code Playgroud)
...我的猜测是这些方法根本没有正确合成.
我想知道这是否是编译错误.或者是一个缺点.因为我认为它可以处理这个案子.
也许Swift设计师认为在覆盖的情况下weight你也可以简单地在初始化器中将其设置为不同的值.嗯.
此外,如果有人想要覆盖属性才能dynamic生效,请参阅KVO
class MyClass: NSObject {
var date = NSDate()
}
class MyChildClass: MyClass {
dynamic override var date: NSDate {
get { return super.date }
set { super.date = newValue }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39360 次 |
| 最近记录: |