2017-06-01 33 views
-4

我有问题没有下标构件。
这里是我的SWIFT 2.3键入任何?具有与来自2.3的码转换为迅速3.0在迅速3

var RequestDict = [String: AnyObject]() 

func API() { 
self.RequestDict = result["rows"]![0]["value"] as! [String: AnyObject] 

} 

这段代码在SWIFT 2.3,但3.0的显示错误做工精细代码。

类型任何?没有下标成员。

+0

为什么你对这个问题给出否定的点?请解释一下。 –

+0

你应该包括在您初始化你的'result'对象的代码。然而,即使不知道result'应该是什么类型',我敢肯定你是不是铸造'结果[“行”]'到合适的类型,但保持它'Any',这的确没有标成员。 –

+1

请[上的错误搜索(https://stackoverflow.com/search?q=%5Bswift%5D+Type+Any+has+no+subscript+members)发布之前。这已经被回答了很多次。 – rmaddy

回答

0

早些时候SWIFT 2.3result["rows"]![0]代码没有错误很容易编译。但事情在迅速3已经改变,因为所得到的被转化为Any类型和Any类型没有下标成员。

result["rows"]Array被第一类型强制转换,然后从该阵列可以访问哪些需要在其中收到的类型被进一步类型强制转换的第0个元素

如果你想在上面的代码像以前一样工作,那么你可以使用SwiftyJSON在那里你可以你的结果转换为JSON对象

假设你的结果是具有命名为内部行数组的对象。

let dictionary = result as! [String:AnyObject] 
let yourResultInJSON = JSON(rawValue: dictionary) 

然后你就可以轻松地使用此行yourResultInJSON["rows"]![0]["value"]这也将是一个新的JSON对象,你可以像获取你想要的键值:

let finalValue = yourResultInJSON["rows"]![0]["value"] 
let someValue = finalValue["yourKey"].stringValue //or intValue or whatever you need to typecast