2017-08-30 70 views
0

我在檢查多維數組中的值時遇到了問題。檢查多維數組中的值是否等於一個字符串swift

我在裏面創建了一個數組內的數組。

該數組被稱爲profilerdata,變量「key」是一個字符串,所以它應該是這些數組中的三個刺。

在我的日誌中的數組作爲SwiftDeferredNSArray,我認爲是第一個問題,因爲我讀過這是一個非可變數組。

var newKeyArray = [[key],[String](),[""]] 

for thing in dataArray as! [[String: AnyObject]] { 
    newKeyArray[1].append("0") 
} 

print(newKeyArray) 
profilerData.append(newKeyArray as AnyObject) 

然後我嘗試和數組中讀出的值,像這樣:

var n = 1 
while n <= elementArray.count { 
    if profilerData[n][0] as! String == headertitle { 
     print("it matches") 
    } else { 
     print("it does not match") 
    } 

    n += 1 
} 

變量「headertitle」是一個字符串太多,但在運行此我得到一個錯誤:

Could not cast value of type 'Swift._SwiftDeferredNSArray' (0x104ce8040) to 'NSString' (0x101f97c60).

這個錯誤是發生在這一行

if profilerData[n][0] as! String == headertitle { 

非常感謝任何幫助,

p.s.請簡單解釋一下,因爲我是Swift的新手。

+0

你能解釋爲什麼你將'newKeyArray'轉換爲'AnyObject'嗎?另外,您能否更準確地引用錯誤消息並解釋它發生了什麼? – matt

+0

我添加了這些細節,我試圖將它轉換爲字符串,但我得到一個錯誤「無法轉換類型的值[[String]]'鍵入'強制字符串'」或只是讓它附加(newKeyArray),它給我錯誤「參數類型'[[String]]'不符合預期類型'AnyObject'」 – Ray

回答

1

你的數組比你想象的要深一層。要看到這個,試試這個代碼,它簡化了你正在做的事情:

let key = "key" 
let newKeyArray = [[key],[String](),[""]] 
var profilerData = [Any]() 
profilerData.append(newKeyArray) 

let oneLevel = profilerData[0] as! Array<Array<String>> 
let twoLevel = oneLevel[0] // Array<String> 
let threeLevel = twoLevel[0] // String 
+0

謝謝,我在一個點上正確的軌道上,但得到一個消息變量沒有下標,所以一定要去對不對,謝謝 – Ray

+0

好吧,這就是爲什麼我說你需要考慮爲什麼你投射到AnyObject。你不應該使用AnyObject或Any _at all_。 (我在我的例子中只用了Any來向你展示你在做什麼。)使用真實類型。 – matt

+0

那麼我應該使用什麼,因爲我似乎不能使用字符串,因爲它會拋出一個錯誤? – Ray

相關問題