2017-08-30 41 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

相关问题