我已经从我的项目中分离出一些可以粘贴到 Playground 中的 Swift 代码。它在正常的 Xcode 编辑和 Playground 中都会产生错误“找不到接受提供的参数的 '+' 的重载” 。该错误是指最后(非平凡)行。
import UIKit
let points = 40
let max = points-1
let L = 10.0
let Deltat = 0.01
let Deltax = L/Double(points)
var a = [Double](count: points, repeatedValue: 0.0)
var b = [Double](count: points, repeatedValue: 0.0)
var c = [Double](count: points, repeatedValue: 0.0)
for i in 1..<max-1
{ //let iPlus1 = i+1
//let temp = 0.5*Deltat/Deltax
c[i] = 0.5*(a[i+1] + a[i-1]) + 0.5*Deltat/Deltax * (b[i+1] - b[i-1])
}
如果我取消注释“let iPlus1...”这一行并进行以下编辑,Swift 将接受该代码。
{ let iPlus1 = i+1
//let temp = 0.5*Deltat/Deltax
c[i] = 0.5*(a[iPlus1] + a[i-1]) + 0.5*Deltat/Deltax * (b[i+1] - b[i-1])
}
如果我取消注释“let temp...”行并进行以下编辑,Swift 将再次接受该代码。
{ //let iPlus1=i+1
let temp = 0.5*Deltat/Deltax
c[i] = 0.5*(a[i+1] + a[i-1]) + temp * (b[i+1] - b[i-1])
}
这些编辑对我来说都没有任何意义,因为它们都是看似微不足道的替换。我知道 Swift 永远不会为我隐式类型转换。在原始代码中似乎没有尝试任何隐式类型转换——所有 Ints 和 Doubles 都按预期声明。我开始相信这是 Swift 数组下标索引的错误。