【发布时间】:2018-07-19 15:56:51
【问题描述】:
我在尝试使用从基类继承的泛型函数的参数时收到标题错误
基类:
BaseBottomBar: UIView {
...
func formatDetailText<T>(value: T...) {
assertionFailure("You shouldn't be using this base class")
}
}
儿童班:
NewTicketBottomBar: BaseBottomBar {
override func formatDetailText<NSNumber>(value: NSNumber...) {
let priceAsCurrencyString = NumberFormatter.currencyFormatter.string(from: value[1]) //Error on this line
assert(priceAsCurrencyString != nil, "The price cannot be nil")
let newTicketText = String(format: "%4.0f", value[0]) + " / TOTAL : " + priceAsCurrencyString!
detailLabel.text = newTicketText
}
}
我想我的基本方法原型在某种程度上是错误的,但我看不出是怎么回事。
一开始我没有使用泛型方法,原型如下:
func formatDetailText(value: Double...) {
...
let priceAsCurrencyString = NumberFormatter.currencyFormatter.string(from: NSNumber(value: value[1]))
...
}
这很好用
任何帮助将不胜感激
【问题讨论】:
-
如果你想让它通用,你应该使用浮点协议的 Numeric、BinaryInteger。如果您需要使用 NSNumber,则无需将其设为通用。
func formatDetailText(value: NSNumber) -
感谢您的回答!我认为我需要它,因为此方法旨在在子类中被覆盖,但底部栏有时会显示文本而不是数字,这就是为什么在我的情况下数字协议不起作用