子类格式化程序在初始化程序上崩溃

问题描述 投票:0回答:1

我正在尝试对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)

其中nameTextFieldNSTextField

我希望能够在初始化时设置最大长度。由于格式化程序没有这样的初始化程序或字段,应该怎么做?

swift initialization subclass formatter
1个回答
0
投票

我认为崩溃是由于基础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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.