Я получаю две ошибки, когда пытаюсь установить точки графика из Yahoo Finance API с помощью Swift. Первая ошибка говорит
'Нельзя вызывать значение типа' SwiftStockChart.LabelForValueGetter '(aka' (CGFloat) → String ') с списком аргументов' (Value: CGFloat) '
это на линии
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
Тогда я также получаю сообщение об ошибке
'Невозможно вызвать значение типа' SwiftStockChart.LabelForValueGetter '(aka' (Int) → String ') с списком аргументов' (Value: 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.
Это предположение, поскольку вопрос не дает достаточно подробностей, чтобы быть уверенным. Так что это может быть неправильно!
Предложение Swift SE0111: Удаление системной значимости ярлыков аргументов функции удалило значимость меток аргументов в типах функций и было реализовано в Swift 3.
SwiftStockKit, как в настоящее время в Интернете, определяет labelForValue
используя:
typealias LabelForValueGetter = (value: CGFloat) -> String
var labelForValue: LabelForValueGetter!
это не будет компилироваться под Swift 3, оно должно быть изменено (как указано в инструкции компилятора):
typealias LabelForValueGetter = (_ value: CGFloat) -> String
var labelForValue: LabelForValueGetter!
Теперь посмотрим на вашу ошибку:
Невозможно вызвать значение типа "SwiftStockChart.LabelForValueGetter" (aka '(CGFloat) → String') с списком аргументов '(Value: CGFloat)
Первый тип здесь не имеет метки аргументов, список аргументов, который вы поставляете, - так что это несоответствие, удалите метку в списке аргументов.
Если вы используете копию SwiftStockKit, которая была обновлена для Swift 3, но вы кодируете более раннюю версию, вы, вероятно, получите гораздо больше ошибок, чем 2, которые вы сообщаете здесь.
НТН
Похоже, вы пытаетесь разделить строку на CGFloat.
Эта строка
let text = labelForValue(value: minValue! + (maxValue! - minValue!) / CGFloat(verticalGridStep!) * CGFloat((i + 1)))
имеет структуру типа:
String/CGFloat * CGFloat
Что именно вы пытаетесь сделать с этой линией? Я могу отредактировать свой ответ с помощью решения, если вы можете дать мне еще один контекст. Также вы бы хотели связаться с библиотекой, которую используете.