我已经从我的项目中分离出一些可以粘贴到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数组下标索引的错误。
答案 0 :(得分:2)
这是一个已知的快速错误:长语句会产生奇怪的编译错误。 只需将您的行拆分为两行,例如:
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 and Xcode 6 GM stuck indexing for weird reason和Xcode 6 with Swift super slow typing and autocompletion(最后一个实际上导致缓慢,但以相同的方式解决,因此根可能是相同的)