小编典典

二进制运算符'/'不能应用于两个'Double'操作数

swift

在尝试在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
}

为什么第一段代码不起作用?


阅读 332

收藏
2020-07-07

共1个答案

小编典典

该错误有点误导。

在第一组代码中,array2被隐式声明为的数组Int。因此,任何将值分配给索引的尝试都array2将需要一个Int值。

问题在于Double(value) / 2.0结果是Double值,而不是Int。因此,编译器正在寻找/返回的版本Int。该版本需要两个Int参数。由于您提供两个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将被替换为47将被替换为3,等等。

第二组代码按原样工作,因为您声明要填充的数组,Double因此所有内容均与正确的类型匹配。

2020-07-07