gpt4 book ai didi

swift - 无法将 NSNumber 类型的值转换为预期的参数类型 NSNumber

转载 作者:搜寻专家 更新时间:2023-11-01 06:00:48 33 4
gpt4 key购买 nike

我在尝试使用从基类继承的泛型函数的参数时遇到标题错误

基类:

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
}
}

Cannot convert value of type NSNumber to expected argument type NSNumber

我想我的基本方法原型(prototype)在某种程度上是错误的,但我看不出是怎么回事。

一开始我没有使用泛型方法,原型(prototype)如下:

func formatDetailText(value: Double...) {
...
let priceAsCurrencyString = NumberFormatter.currencyFormatter.string(from: NSNumber(value: value[1]))
...
}

这很好用

任何帮助将不胜感激

最佳答案

你好像是这样想的

override func formatDetailText<NSNumber>(value: NSNumber...) {

解析通用 <T>在重写的方法中作为 NSNumber。它没有。它只是为通用引入了一个不同的名称;这里的 NSNumber 不是 NSNumber 类,它只是另一个通用的占位符名称,与 T 完全一样(事实上,它 T 的另一个名称)。

很自然地,当您尝试在 NumberFormatter 的 string(from:) 中需要 NSNumber 的地方使用此占位符时,编译器转身说,“老兄 [编译器来自加利福尼亚,这就是它说话的方式],我没有理由认为你的占位符“NSNumber”实际上是 NSNumber。”

你需要给它一个这样想的理由。你的意思可能是

override func formatDetailText<T>(value: T...) where T : NSNumber {

关于swift - 无法将 NSNumber 类型的值转换为预期的参数类型 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427143/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com