我从项目中隔离了一些Swift代码,可以将其粘贴到Playground中。在普通的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数组下标索引的错误。
这是一个已知的迅速错误:长语句生成奇怪的编译错误。只需将您的行分为两行,例如:
c[i] = 0.5*(a[i+1] + a[i-1])
c[i] += 0.5*Deltat/Deltax * (b[i+1] - b[i-1])
我发现同一行中有4或5个以上的算术运算会发生这种情况,但这不是规则,只是一些表达式类型中存在一个数字-在其他情况下可能有所不同。
例如看此问答:Xcode Beta 6.1和Xcode 6 GM由于奇怪的原因而卡住了索引,而Xcode 6具有Swift超级慢速键入和自动补全功能(这最后一个实际上会导致速度变慢,但是以相同的方式解决,所以根可能是相同的)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句