我正在尝试对Formatter类进行子类化,以对文本字段执行验证。当调用super.init()时,应用程序崩溃:
class LengthFormatter: Formatter {
private var maxLength: Int
init(_ maxLength: Int) {
self.maxLength = maxLength
super.init() // BAD_ACCESS crash
}
required init? (coder: NSCoder) {
self.maxLength = 0
super.init(coder: coder)
}
我这样称呼它:
nameTextfield.formatter = LengthFormatter(3)
其中nameTextField
是NSTextField
。
我希望能够在初始化时设置最大长度。由于格式化程序没有这样的初始化程序或字段,应该怎么做?
我认为崩溃是由于基础Formatter
中的抽象函数异常所致,应按如下所示对其进行覆盖(使用Xcode 11.2 / macOS 10.15测试)
class LengthFormatter: Formatter {
private var maxLength: Int
init(_ maxLength: Int) {
self.maxLength = maxLength
super.init()
}
required init? (coder: NSCoder) {
self.maxLength = 0
super.init(coder: coder)
}
override func string(for obj: Any?) -> String? { // overriden abstract method
return obj as? String // < example, returned value might depend on context
}
}