在尝试在Swift 3中执行此代码块时,我遇到了错误:二进制运算符’/’无法应用于两个’Double’操作数
var array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = Double(value) / 2.0 }
但这有效
var array2 = [Double]() array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = value / 2.0 }
为什么第一段代码不起作用?
该错误有点误导。
在第一组代码中,array2被隐式声明为的数组Int。因此,任何将值分配给索引的尝试都array2将需要一个Int值。
array2
Int
问题在于Double(value) / 2.0结果是Double值,而不是Int。因此,编译器正在寻找/返回的版本Int。该版本需要两个Int参数。由于您提供两个Double参数,因此您会遇到问题中提到的错误。
Double(value) / 2.0
Double
/
解决方案是将结果强制转换为Int或使用两个Int参数作为/。
var array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = Int(Double(value) / 2.0) // cast to Int }
要么
var array2 = [8, 7, 19, 20] for (index, value) in array2.enumerated() { array2[index] = value / 2 // Use two Int }
在这种情况下,结果将是相同的。8将被替换为4。7将被替换为3,等等。
8
4
7
3
第二组代码按原样工作,因为您声明要填充的数组,Double因此所有内容均与正确的类型匹配。