Ios swift:无法将类型为“()”的值转换为预期的参数类型“[Double]”

Ios swift:无法将类型为“()”的值转换为预期的参数类型“[Double]”,ios,arrays,swift,xcode,data-transform,Ios,Arrays,Swift,Xcode,Data Transform,我正在iOS应用程序上使用图表 它将从蓝牙获取数据并另存为数组=[] 绘制图表时,它必须转换为[Double] func setChart(values: [Double]) { // mChart.noDataText = "No data available!" for i in 0..<values.count { print("chart point : \(values[i])") let dataE

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

它将从蓝牙获取数据并另存为数组=[]

绘制图表时,它必须转换为[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)
        }
这些是我试图从TransferdData向setChart添加数据的代码

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

我该怎么解决这个问题

**************************编辑********************************

我现在有两份Swift文件

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

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'
    }
这用于保存和处理数据。 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))
        }

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

线程1:致命错误:无法在transferredData处形成上限为是否尝试了以下代码?我使用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 

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

因为错误消息明确指出,您不能返回可选的双精度,所以请给出默认值或使用compactMap忽略所有无法转换的值

默认值

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

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

使用map或compactMap时不需要循环,看起来我可以将TransferdData的类型从Array更改为Arrayvar a=TransferdData.map{Double$0}setChartvalues:a as![重复]我试过了,但还没有检查。我希望它能工作。你能添加一个数组来显示数据的外观吗?看起来你应该可以做双重数据string@STerrier我尝试了Double我的字符串,它有一个错误,对初始值设定项'init:'的模糊引用感谢您的回答。没有错误,但它不显示图形。但这不是转换数据的问题,而是图形的问题。谢谢:不。。。我已经检查了图形,我直接制作了一个数组,它可以工作;您能显示用于测试的数据数组吗?我认为transferDData.endIndex可能是0,所以出现了这个问题。但我已经检查过了,它可以保存和处理数据。我不知道是什么问题;
setChart(values: transferedData.compactMap{ Double($0) })