找不到成员下标

我试图执行下面的代码,并得到错误在Xcode6 Could not find member 'subscript

 var b:[[Float]] = [[1,2]] var i2 = 0 // second to last control point var pointIm1 = CGPoint(x: 0.0,y: 0.0) var pointI = CGPoint(x: 0.0,y: 0.0) var pointIp1 = CGPoint(x: 0.0,y: 0.0) var px:Float = b[0][0] * Float(pointIm1.x) + b[0][0] * Float(pointI.x) + b[0][0] + b[0][0] * Float(pointIp1.x) 

任何人都知道为什么给错误

编辑:有没有人有更好的主意,或者我需要为每个下标创build不同的variables,正如Nate在他的回答中所build议的

 //not looks good var bj0 = b[j][0] var bj1 = b[j][1] var bj2 = b[j][2] var bj3 = b[j][3] var px:Float = bj0 * Float(pointIm1.x) + bj1 * Float(pointI.x) + bj2 + bj3 * Float(pointIp1.x) 

下标不是问题 – 当你试图parsing像你最后一行那样的更长的多项expression式时,Swift会陷入困境。 在操场上,我得到这个错误:

表情太复杂,无法在合理的时间内解决; 考虑把expression分解成不同的子expression式

您需要重构该行来超越这个限制 – 如下所示:

 let b00 = b[0][0] var px: Float = b00 * Float(pointIm1.x) + b00 * Float(pointI.x) + b00 + b00 * Float(pointIp1.x) 

你可能可以把它分成两步,像这样:

 var px:Float = bj0 * Float(pointIm1.x) + bj1 * Float(pointI.x) px += bj2 + bj3 * Float(pointIp1.x) 

它看起来像一个编译器错误。 我尝试了这个expression式(从你的获得,并删除所有乘法):

 var px:Float = b[0][0] + b[0][0] + b[0][0] + b[0][0] 

它失败了,而这个:

 var px:Float = b[0][0] + b[0][0] + b[0][0] 

作品。

所以Nate Cook的答案是正确的,这是编译器陷入困境。

更多的testing – 使用一个一维数组,这个工作:

 var c:[Float] = [1.0, 2.0] var px2: Float = c[0] + c[0] + c[0] + c[0] + c[0] 

但是这不

 var px2: Float = c[0] + c[0] + c[0] + c[0] + c[0] + c[0] // Cannot invoke '+' with arguments of type '($T28, $T32)' 

请注意 ,您的expression式可以重构为:

 var px:Float = b[0][0] * (Float(pointIm1.x) + Float(pointI.x) + 1.0 + Float(pointIp1.x))