Swift错误 - '不能调用类型'SwiftStockChart.LabelForValueGetter'(又名'(CGFloat) - >字符串')与参数列表的值'(值:CGFloat)'
我收到两个错误,当我试图设置使用Swift从Yahoo Finance API获取图表点数。第一个错误说Swift错误 - '不能调用类型'SwiftStockChart.LabelForValueGetter'(又名'(CGFloat) - >字符串')与参数列表的值'(值:CGFloat)'
'不能调用类型的值 'SwiftStockChart.LabelForValueGetter'(又名'(CGFloat的) - >字符串')与参数列表 '(价值:CGFloat的)'
这是上线
let text = labelForValue(value: minValue! + (maxValue! - minValue!)/CGFloat(verticalGridStep!) * CGFloat((i + 1)))
然后,我也得到一个错误说
'不能调用类型的值 'SwiftStockChart.LabelForValueGetter'(又名'(INT) - >字符串')与参数列表 '(价值:智力)'
这是行
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)
}
猜测:您正在使用SwiftStockKit的Swift 3前版本设计的代码或阅读文档。
这是一个猜测,因为这个问题没有提供足够的细节来确定。所以这可能是错的!
雨燕建议SE0111: Remove type system significance of function argument labels去除参数标签的功能类型的意义和斯威夫特三是实施
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的副本已更新的斯威夫特3,但你编码的早期版本,你可能会得到比2,你在这里报告了很多错误。
HTH
我看起来像你企图分裂由CGFloat的字符串。
此行
let text = labelForValue(value: minValue! + (maxValue! - minValue!)/CGFloat(verticalGridStep!) * CGFloat((i + 1)))
具有的结构类型:
String/CGFloat * CGFloat
究竟什么是你想用这条线怎么办?如果你能给我更多的上下文,我可以用解决方案编辑我的答案。你也会愿意链接到你正在使用的图书馆。
我试图从使用Alamofire –
你要我给更多的代码雅虎API的图形设置的图表点? –
什么是虽然DIVID?你是否试图分开浮动,然后把它们变成一个字符串? –
这已经修复了第一个错误,但不是第二个?你有什么建议有关let文本= labelForIndex(索引:1)? –
这是同样的问题,只是不同的功能类型。 ,还可以有更多的,你也许可以比较(DIFF/FileMerge)您使用对一个以上的联系,因为我猜你的文档SwiftStockKit的来源是(预斯威夫特3)网络版。 – CRD