2017-06-22 56 views
-2

我收到兩個錯誤,當我試圖設置使用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) 

    } 

回答

0

猜測:您正在使用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

+0

這已經修復了第一個錯誤,但不是第二個?你有什麼建議有關let文本= labelForIndex(索引:1)? –

+0

這是同樣的問題,只是不同的功能類型。 ,還可以有更多的,你也許可以比較(DIFF/FileMerge)您使用對一個以上的聯繫,因爲我猜你的文檔SwiftStockKit的來源是(預斯威夫特3)網絡版。 – CRD

0

我看起來像你企圖分裂由CGFloat的字符串。

此行

let text = labelForValue(value: minValue! + (maxValue! - minValue!)/CGFloat(verticalGridStep!) * CGFloat((i + 1))) 

具有的結構類型:

String/CGFloat * CGFloat 

究竟什麼是你想用這條線怎麼辦?如果你能給我更多的上下文,我可以用解決方案編輯我的答案。你也會願意鏈接到你正在使用的圖書館。

+0

我試圖從使用Alamofire –

+0

你要我給更多的代碼雅虎API的圖形設置的圖表點? –

+0

什麼是雖然DIVID?你是否試圖分開浮動,然後把它們變成一個字符串? –

相關問題