我正在处理命令行应用程序。第一个数组(称为firstArray,是)是用户通过readLine()输入的结果,它的所有元素都是Double。现在,我必须创建第二个数组,并将计算结果应用于第一个数组。某些结果是NaN,这是三角计算的原因。我需要将所有NaN都更改为字符串,但出现错误“无法将类型为'String'的值分配为类型为'Double'”。如何解决这个问题?
func calcLn () -> [Double] {
var calculatedArray = [Double]()
for item in firstArray {
var result = log(Double((-100))/(cos(item)))
calculatedArray.append(result)
}
for index in 0..<calculatedArray.count {
if calculatedArray[index].isNaN {
calculatedArray[index] = String("can't calculate")
答案 0 :(得分:0)
一个数组只能存储一种类型的东西。 calculatedArray
只能存储Double
s,因此不能将其元素设置为String
s。
您可以创建一个名为outputArray
的新数组,该数组可以存储字符串,并将所有双打转换为字符串:
var outputArray = [String]()
for index in 0..<calculatedArray.count {
if calculatedArray[index].isNaN {
outputArray.append("can't calculate")
} else {
outputArray.append("\(calculatedArray[index])")
}
}
您的calcLn
方法返回一个[Double]
,但是您似乎想返回outputArray
。在这种情况下,您需要更改其签名以返回[String]
。
请注意,您可以使用map
进行数组转换。这是您的代码的较短版本:
func calcLn () -> [String] {
let calculatedArray = firstArray.map { log(100.0/cos($0)) }
let outputStringsArray = calculatedArray.map { $0.isNaN ? "can't calculate" : "\($0)" }
return outputStringsArray
}