0

我在 iOS 应用程序上使用图表。

它将从蓝牙获取数据并保存为 Array = []

绘制图表时必须转换为[Double]

func setChart(values: [Double]) {
        // mChart.noDataText = "No data available!"
        for i in 0..<values.count {
            print("chart point : \(values[i])")
            let dataEntry = ChartDataEntry(x: Double(i), y: values[i])
            dataEntries.append(dataEntry)
        }

这些是绘制图形的代码。

for i in 1...transferedData.endIndex-1{
        setChart(values : transferedData[i]) // Cannot convert value of type 'String' to expected argument type '[Double]'
       setChart(values: transferedData.map{ Double($0)}) //Cannot convert value of type 'Double?' to closure result type 'Double'
    }

这些是我尝试将数据从 transferedData 添加到 setChart 的代码。

我找到了互联网,但我无法解决这个问题。

这个问题我该怎么办?

****************************** 已编辑 ************************* *********

我现在有两个 Swift 文件。

一种用于数据传输,另一种用于绘制图形。

这是为了保存和处理数据。(SerialViewController.swift)

public var UserDis : Array<String> = []

func getRealDataProcess(){        
        splitUserData = receivedDataForReal.split(separator: ";") 
        for j in 0...splitUserData.endIndex-1 { 
            if splitUserData[j].count == 14{ 
                checkedUser14Data.append(String(splitUserData[j]))
            }
        }

        for k in 0...checkedUser14Data.endIndex-1{
            var strForCal = checkedUser14Data[k]
            var valDis = strForCal[strForCal.startIndex...strForCal.index(strForCal.startIndex, offsetBy: 4)] 
            UserDis.append(String(valDis))
        }

    }

这是用于绘制图形。(GraphViewController.swift)

for i in 0...transferedData.endIndex-1{
            let inputData = Double(transferedData[i])!
            setChart(values: [inputData])
        }

线程 1:致命错误:Can't form Range with upperBound < lowerBound 现在正在转移数据.endIndex-1

4

2 回答 2

0

你试过下面的代码吗?我正在使用 if 语句将数据从可选转换。

var transferedData: [String] = ["12.2","24.3","23"]

for data in transferedData {
if let convertedData = Double(data){
   setChart(values : cobvertedData)
  }
}

我尝试使用您使用的 for 循环

for i in 1...transferedData.endIndex-1 

但它会遗漏一个数组,使数据集不完整。

于 2019-09-16T00:22:16.233 回答
-1

由于错误消息清楚地表明您不能返回可选的双精度,所以要么给出一个默认值,要么使用 compactMap 来忽略所有无法转换的值

默认值

setChart(values: transferedData.map{ Double($0) ?? 0.0}) 

紧凑地图

setChart(values: transferedData.compactMap{ Double($0) }) 

而且你在使用时不需要循环mapcompactMap

于 2019-09-16T07:02:40.657 回答