Swift 错误 - “无法使用参数列表“(Value:CGFloat)”调用 'SwiftStockChart.LabelForValueGetter' 类型的值(又名“(CGFloat) -> String”)
Swift Error - 'Cannot invoke value of type 'SwiftStockChart.LabelForValueGetter' (aka'(CGFloat) -> String') with argument list '(Value:CGFloat)'
当我尝试使用 Swift 从 Yahoo Finance API 设置图表点时出现两个错误。第一个错误说
'无法使用参数列表'(Value:CGFloat)'调用类型 'SwiftStockChart.LabelForValueGetter'(又名'(CGFloat) -> String')的值
已上线
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
然后我也收到一条错误消息
'无法使用参数列表'(Value:Int)'调用 'SwiftStockChart.LabelForValueGetter' 类型的值(又名'(Int) -> String')
这是在线
let text = labelForIndex(index: i)
完整代码为:
func setChartPoints(points: [ChartPoint]) {
if points.isEmpty { return }
dataPoints = points
computeBounds()
if maxValue!.isNaN { maxValue = 1.0 }
for i in 0 ..< verticalGridStep! {
let yVal = axisHeight! + margin! - CGFloat((i + 1)) * axisHeight! / CGFloat(verticalGridStep!)
let p = CGPoint(x: (valueLabelPosition! == .right ? axisWidth! : 0), y: yVal)
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
let rect = CGRect(x: margin!, y: p.y + 2, width: self.frame.size.width - margin! * 2 - 4.0, height: 14.0)
let width = text.boundingRect(with: rect.size,
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes:[NSFontAttributeName : valueLabelFont!],
context: nil).size.width
let xPadding = 6
let xOffset = width + CGFloat(xPadding)
let label = UILabel(frame: CGRect(x: p.x - xOffset + 5.0, y: p.y, width: width + 2, height: 14))
label.text = text
label.font = valueLabelFont
label.textColor = valueLabelTextColor
label.textAlignment = .center
label.backgroundColor = valueLabelBackgroundColor!
self.addSubview(label)
axisLabels.append(label)
}
for i in 0 ..< horizontalGridStep! + 1 {
let text = labelForIndex(index: i)
let p = CGPoint(x: margin! + CGFloat(i) * (axisWidth! / CGFloat(horizontalGridStep!)) * 1.0, y: axisHeight! + margin!)
let rect = CGRect(x: margin!, y: p.y + 2, width: self.frame.size.width - margin! * 2 - 4.0, height: 14)
let width = text.boundingRect(with: rect.size,
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes:[NSFontAttributeName : indexLabelFont!],
context: nil).size.width
let label = UILabel(frame: CGRect(x: p.x - 5.0, y: p.y + 5.0, width: width + 2, height: 14))
label.text = text
label.font = indexLabelFont!
label.textAlignment = .left
label.textColor = indexLabelTextColor!
label.backgroundColor = indexLabelBackgroundColor!
self.addSubview(label)
axisLabels.append(label)
}
我看你是想用 CGFloat 来划分一个字符串。
这一行
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
类型结构为:
String/CGFloat * CGFloat
你到底想用那条线做什么?如果您能给我更多背景信息,我可以用解决方案编辑我的答案。另外,您是否愿意 link 访问您正在使用的图书馆。
猜测:您正在使用为 Swift3 之前版本的 SwiftStockKit 设计的代码或阅读文档。
这是一个猜测,因为问题没有提供足够的细节来确定。所以这可能是错误的!
Swift 提案 SE0111: Remove type system significance of function argument labels 删除了参数标签在函数类型中的重要性,并在 Swift 3 中实现。
SwiftStockKit 目前在网络上定义 labelForValue
使用:
typealias LabelForValueGetter = (value: CGFloat) -> String
var labelForValue: LabelForValueGetter!
这不会在 Swift 3 下编译,必须将其更改为(如编译器错误指示):
typealias LabelForValueGetter = (_ value: CGFloat) -> String
var labelForValue: LabelForValueGetter!
现在看看你的错误:
Cannot invoke value of type 'SwiftStockChart.LabelForValueGetter' (aka'(CGFloat) -> String') with argument list '(Value:CGFloat)
此处的第一种类型没有参数标签,您提供的参数列表有 - 因此不匹配,请删除参数列表中的标签。
如果您使用的是 SwiftStockKit 的副本,该副本已针对 Swift 3 进行了更新,但您正在为较早的版本编码,那么您可能会遇到比 2 多得多的错误在此报告。
HTH
当我尝试使用 Swift 从 Yahoo Finance API 设置图表点时出现两个错误。第一个错误说
'无法使用参数列表'(Value:CGFloat)'调用类型 'SwiftStockChart.LabelForValueGetter'(又名'(CGFloat) -> String')的值
已上线
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
然后我也收到一条错误消息
'无法使用参数列表'(Value:Int)'调用 'SwiftStockChart.LabelForValueGetter' 类型的值(又名'(Int) -> String')
这是在线
let text = labelForIndex(index: i)
完整代码为:
func setChartPoints(points: [ChartPoint]) {
if points.isEmpty { return }
dataPoints = points
computeBounds()
if maxValue!.isNaN { maxValue = 1.0 }
for i in 0 ..< verticalGridStep! {
let yVal = axisHeight! + margin! - CGFloat((i + 1)) * axisHeight! / CGFloat(verticalGridStep!)
let p = CGPoint(x: (valueLabelPosition! == .right ? axisWidth! : 0), y: yVal)
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
let rect = CGRect(x: margin!, y: p.y + 2, width: self.frame.size.width - margin! * 2 - 4.0, height: 14.0)
let width = text.boundingRect(with: rect.size,
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes:[NSFontAttributeName : valueLabelFont!],
context: nil).size.width
let xPadding = 6
let xOffset = width + CGFloat(xPadding)
let label = UILabel(frame: CGRect(x: p.x - xOffset + 5.0, y: p.y, width: width + 2, height: 14))
label.text = text
label.font = valueLabelFont
label.textColor = valueLabelTextColor
label.textAlignment = .center
label.backgroundColor = valueLabelBackgroundColor!
self.addSubview(label)
axisLabels.append(label)
}
for i in 0 ..< horizontalGridStep! + 1 {
let text = labelForIndex(index: i)
let p = CGPoint(x: margin! + CGFloat(i) * (axisWidth! / CGFloat(horizontalGridStep!)) * 1.0, y: axisHeight! + margin!)
let rect = CGRect(x: margin!, y: p.y + 2, width: self.frame.size.width - margin! * 2 - 4.0, height: 14)
let width = text.boundingRect(with: rect.size,
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes:[NSFontAttributeName : indexLabelFont!],
context: nil).size.width
let label = UILabel(frame: CGRect(x: p.x - 5.0, y: p.y + 5.0, width: width + 2, height: 14))
label.text = text
label.font = indexLabelFont!
label.textAlignment = .left
label.textColor = indexLabelTextColor!
label.backgroundColor = indexLabelBackgroundColor!
self.addSubview(label)
axisLabels.append(label)
}
我看你是想用 CGFloat 来划分一个字符串。
这一行
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
类型结构为:
String/CGFloat * CGFloat
你到底想用那条线做什么?如果您能给我更多背景信息,我可以用解决方案编辑我的答案。另外,您是否愿意 link 访问您正在使用的图书馆。
猜测:您正在使用为 Swift3 之前版本的 SwiftStockKit 设计的代码或阅读文档。
这是一个猜测,因为问题没有提供足够的细节来确定。所以这可能是错误的!
Swift 提案 SE0111: Remove type system significance of function argument labels 删除了参数标签在函数类型中的重要性,并在 Swift 3 中实现。
SwiftStockKit 目前在网络上定义 labelForValue
使用:
typealias LabelForValueGetter = (value: CGFloat) -> String
var labelForValue: LabelForValueGetter!
这不会在 Swift 3 下编译,必须将其更改为(如编译器错误指示):
typealias LabelForValueGetter = (_ value: CGFloat) -> String
var labelForValue: LabelForValueGetter!
现在看看你的错误:
Cannot invoke value of type 'SwiftStockChart.LabelForValueGetter' (aka'(CGFloat) -> String') with argument list '(Value:CGFloat)
此处的第一种类型没有参数标签,您提供的参数列表有 - 因此不匹配,请删除参数列表中的标签。
如果您使用的是 SwiftStockKit 的副本,该副本已针对 Swift 3 进行了更新,但您正在为较早的版本编码,那么您可能会遇到比 2 多得多的错误在此报告。
HTH