swift: 无法将类型“()”的值转换为预期的参数类型“[Double]”
swift : Cannot convert value of type '()' to expected argument type '[Double]'
我正在 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([=12=])}) //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:致命错误:无法形成 Range with upperBound < lowerBound 现在发生在 transferredData.endIndex-1
您试过下面的代码了吗?我正在使用 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
但它会遗漏一个数组,使数据集不完整。
由于错误消息明确指出您不能 return 可选的双精度值,因此要么提供默认值,要么使用 compactMap 忽略所有无法转换的值
默认值
setChart(values: transferedData.map{ Double([=10=]) ?? 0.0})
紧凑地图
setChart(values: transferedData.compactMap{ Double([=11=]) })
并且在使用 map
或 compactMap
时不需要循环
我正在 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([=12=])}) //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:致命错误:无法形成 Range with upperBound < lowerBound 现在发生在 transferredData.endIndex-1
您试过下面的代码了吗?我正在使用 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
但它会遗漏一个数组,使数据集不完整。
由于错误消息明确指出您不能 return 可选的双精度值,因此要么提供默认值,要么使用 compactMap 忽略所有无法转换的值
默认值
setChart(values: transferedData.map{ Double([=10=]) ?? 0.0})
紧凑地图
setChart(values: transferedData.compactMap{ Double([=11=]) })
并且在使用 map
或 compactMap