找不到成员下标
我试图执行下面的代码,并得到错误在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))