Overriding properties in swift
Interestingly this works just fine in pure Swift classes. For example, this works as expected:
public class FooButton { public var weight: Double = 1.0}public class BarButton: FooButton { override public var weight: Double = 2.0}
The reason it does not work for you is because you are working with Objective-C classes: since UIButton
is an Objective-C class, all its subclasses will be too. Because of that, the rules seem to be a bit different.
Xcode 6.3 is actually a bit more informative. It shows the following two errors:
Getter for "weight" overrides Objective-C method "weight" from superclass "FooButton" Setter for "weight" overrides Objective-C method "setWeight:" from superclass "Foobutton"
Since the following does work ...
public class BarButton: FooButton { override public var weight: Double { get { return 2.0 } set { // Do Nothing } }}
... my guess is that these methods are simply not synthesized correctly.
I wonder if this is a compiler bug. Or a shortcoming. Because I think it could handle the case.
Maybe the Swift designers thought that in case of overriding weight
you could also simply set it to a different value in your initializer. Hm.
In addition, if someone wants to override property to have dynamic
effect, see KVO
class MyClass: NSObject { var date = NSDate()}class MyChildClass: MyClass { dynamic override var date: NSDate { get { return super.date } set { super.date = newValue } }}
In the above you have a getter and a setter.
When you override it, you are just assigning it a value.
Instead set up the setter and getter as you have above.
var _text:Text override public var text: String? { get { return _text } set { _text = newValue } }