在Swift数组下标索引中的错误?

我已经从我的项目中分离出一些可以粘贴到Playground中的Swift代码。 它会在正常的Xcode编辑和Playground中产生一个错误“无法find接受提供的参数的'+'的重载 。 错误指的是最后一条(非平凡的)行。

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]) } 

这两个编辑对我来说都没有任何意义,因为两者看起来都是微不足道的replace。 我知道,斯威夫特绝不会隐式地为我所用。 在原始代码中似乎没有尝试使用隐式types转换 – 所有的Ints和Doubles都是按照预期进行声明的。 我开始相信这是一个Swift数组下标索引的错误。

这是一个已知的swift错误:long语句会产生奇怪的编译错误。 只需将你的线分成两行,例如:

 c[i] = 0.5*(a[i+1] + a[i-1]) c[i] += 0.5*Deltat/Deltax * (b[i+1] - b[i-1]) 

我发现在同一行中发生超过4或5个算术运算,但这不是一个规则,只是一些expression式types的数字 – 在其他情况下可能不同。

在这个Q&A看看例子: Xcode Beta 6.1和Xcode 6 GM卡住索引奇怪的原因和Xcode 6与Swift超慢input和自动完成 (这最后一个实际上导致缓慢,但以相同的方式解决,所以根可能是相同)

Interesting Posts