2014-09-28 31 views
3

我試圖執行下面的代碼,並得到錯誤Could not find member 'subscript上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) 

回答

2

這是不符合標一個問題 - 斯威夫特陷入困境當試圖解析像你的最後一行那樣的更長的多項表達式時。在操場上,我得到這個錯誤:

expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

你需要重構該行突破這個限制 - 是這樣的:

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) 
+0

我越來越'無法找到成員'下標'是否有任何問題表達式然而,如果我從表達式中刪除'b [0] [0] * Float(pointIp1.x)'工作正常 – codester 2014-09-28 18:49:20

+0

我在操場上遇到了兩個錯誤 - 代碼沒有問題,編譯器無法處理它。不幸的是,你需要解決這個編譯器錯誤。 – 2014-09-28 18:50:23

+0

我猜編譯器在推斷嵌套數組的類型時不好,所以首先分配一個局部變量來解決這個問題。 – 2014-09-28 18:52:28

1

它看起來像一個編譯器錯誤。我想這個表達式(從你得到的,刪除所有乘法):

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] 

作品。

因此,內特庫克的答案是正確的,這是編譯器陷入困境。

更多的測試 - 用一維數組,這個工程:

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