使用setText
,我可以通过以下代码覆盖text
功能。 UITextField
是- (void)setText:(NSString *)text
{
[super setText:text];
....
}
的属性,我将其分类为一些自定义UI设计。
setText
我的问题是,如何通过 Swift 来做这件事?
当我使用Swift编程时,没有这样的函数setter
。如何使用Swift覆盖属性的getter
和##teamcity[buildNumber 'XYZ']
方法?
答案 0 :(得分:2)
在这种情况下,你可以使用变量观察者。
var variableName: someType = expression {
willSet(valueName) {
// code called before the value is changed
}
didSet(valueName) {
// code called after the value is changed
}
}
一个实际的例子。
“class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}”
摘录自:Apple Inc.“The Swift Programming Language(Swift 2.1 Prerelease)。”iBooks。 https://itun.es/us/k5SW7.l
答案 1 :(得分:1)
在UITextField
的子类中,覆盖text
属性:
override public var text:String? {
didSet {
NSLog("text = \(text)")
}
}
但请注意,此didSet
观察者在属性更改后被称为,因此您无法决定恢复到之前的值,因为它已被替换。
如果要在更改值之前执行操作,可以使用willSet
观察者,该值在更改值之前调用。
override public var text:String? {
didSet {
NSLog("text = \(text)")
}
willSet {
NSLog("will change from \(text) to \(newValue)")
}
}
此代码的小例子:
var testTextfield = MyTextFieldClass()
testTextfield.text = "test"
testTextfield.text = "test1"
输出
will change from Optional("") to Optional("test")
text = Optional("test")
will change from Optional("test") to Optional("test1")
Optional("test1")