在尝试在Swift 3中执行此代码块时,我遇到了错误:二元运算符'/'不能应用于两个'Double'操作数
var array2 = [8, 7, 19, 20]
for (index, value) in array2.enumerated() {
array2[index] = Double(value) / 2.0
}
Run Code Online (Sandbox Code Playgroud)
然而这很有效
var array2 = [Double]()
array2 = [8, 7, 19, 20]
for (index, value) in array2.enumerated() {
array2[index] = value / 2.0
}
Run Code Online (Sandbox Code Playgroud)
为什么第一个代码块不起作用?
rma*_*ddy 27
该错误有点误导.
在第一组代码中,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
}
Run Code Online (Sandbox Code Playgroud)
要么
var array2 = [8, 7, 19, 20]
for (index, value) in array2.enumerated() {
array2[index] = value / 2 // Use two Int
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,结果将是相同的.8将被取代4.7将被替换为3等
第二组代码按原样运行,因为您声明要填充的数组,Double因此所有内容都与正确的类型匹配.
| 归档时间: |
|
| 查看次数: |
22392 次 |
| 最近记录: |