Swift中的自定义数字格式化程序

时间:2014-09-20 17:21:29

标签: swift xcode6

我想为我的应用程序创建一个自定义的NumberFormatter,以便我有一些额外的属性,例如" lengthSymbol"。 但是每次我想添加一个属性都可以:

let lengthSymbol:String = "ft"

但实际上我想稍后设置属性以便我有

let lengthSymbol:String

我以为我以后可以做:

init(symbol:String) {
    lengthSymbol = symbol
}

但是我得到了我必须实现的错误:

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

这是我的第一个问题:这究竟是什么?

我还必须在" init"函数 - 我收到错误"在返回初始化程序之前没有调用Super.init" 我现在该怎么做?

如果有人可以帮助我,那会很棒。)

3 个答案:

答案 0 :(得分:2)

您需要的是变量,而不是常量。

var lengthSymbol : String?

它应该是可选的,因为无论是否设置它都很有可能。

答案 1 :(得分:0)

添加属性观察函数:

var lengthSymbol: String {
    didSet {
        // your initialization stuff here
    }
}

请参阅The Swift Programming Language

中的相应章节

答案 2 :(得分:0)

如果格式化程序实例位于Nib文件中,则必须在NSCoding上实施NSFormatter协议。 Archiving guide可以具体告诉你这个,但是长话短说,你只需要实现scaffold方法并添加一个反序列化lengthSymbol变量并在尾部调用super.init的方法。 p>

init(coder aDecoder: NSCoder) {
     lengthSymbol = aDecoder.decodeObjectForKey("MyFormatter_LengthKey")

     return super.init(coder:aDecoder)
}

您还必须实施encodeWithCoder,但这非常简单。