Swift中的UITextField`setText`

时间:2016-02-15 10:11:36

标签: ios swift

使用setText,我可以通过以下代码覆盖text功能。 UITextField- (void)setText:(NSString *)text { [super setText:text]; .... } 的属性,我将其分类为一些自定义UI设计。

setText

我的问题是,如何通过 Swift 来做这件事?

当我使用Swift编程时,没有这样的函数setter。如何使用Swift覆盖属性的getter##teamcity[buildNumber 'XYZ'] 方法?

2 个答案:

答案 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")