繁体   English   中英

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

[英]Bug in Swift array subscript indexing?

我从项目中隔离了一些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超级慢速键入和自动补全功能 (这最后一个实际上会导致速度变慢 ,但是以相同的方式解决,所以根可能是相同)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM