Ios 找不到成员下标

Ios 找不到成员下标,ios,swift,xcode6,Ios,Swift,Xcode6,我正在尝试执行以下代码,并得到错误在Xcode6上找不到成员的下标 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(poi

我正在尝试执行以下代码,并得到错误
在Xcode6上找不到成员的下标

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)
任何人都知道为什么会犯错

编辑:是否有人有更好的想法,或者我需要为每个下标创建不同的变量,正如内特在回答中所建议的那样

//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)

下标没有问题-当试图解析较长的多项目表达式(如最后一行)时,Swift会遇到麻烦。在操场上,我遇到了这样的错误:

表达式过于复杂,无法在合理的时间内解决;把表达式分解成不同的子表达式

您需要重构该行以克服此限制-类似于:

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)

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

它失败了,而这:

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

所以内特·库克的答案是正确的,是编译器出了问题

更多测试-使用一维数组,可以:

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)'
注意表达式可以重构为:

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

我发现
找不到成员“subscript”
表达式中是否有任何问题,但是如果我从表达式中删除
b[0][0]*Float(pointIp1.x)
,我会发现这两个错误-您的代码没有问题,编译器无法处理它。不幸的是,您需要解决这个编译器错误。我猜编译器不善于从嵌套数组推断类型,所以分配一个局部变量首先可以解决这个问题。编辑的问题您有更好的想法吗,或者我必须为每个数组都设置变量
var px:Float = b[0][0] * (Float(pointIm1.x) + Float(pointI.x) + 1.0 + Float(pointIp1.x))