【问题标题】:Loop through AnyObject Array循环访问 AnyObject 数组
【发布时间】:2015-04-24 21:38:29
【问题描述】:

我的数据包含各种值的用户数据(我可以解析出来),然后以多种货币为每个用户提供余额。

我可以解析出用户数据。例如:

if let add2 = parsed["address"] as? String {
    println("Alert: \(add2)")
}

我可以得到余额列表:

if let findbalances = parsed["balances"]{    
           println("find the balances: \(findbalances)")

我可以得到各个值:

var balance11:Double = findbalances[0]["available_amount"] as! Double/100

var curr11:String = findbalances[0]["currency"] as! String

数组是AnyObject。如果我尝试:

for currency in findbalances {

我明白了

类型 AnyObject 不符合序列

然后我尝试将其向下转换为String

if let findbalances = parsed["balances"] as? String {
for currency in findbalances {

我的输出是空白的。

但我知道价值观就在那里。

我被难住了;如何在 Swift 中循环遍历 AnyObject 数组?

【问题讨论】:

    标签: ios arrays swift


    【解决方案1】:

    我认为你很接近。在您的代码“for currency in findbalances {”中,您应该知道货币是字典,而不是货币。您是否正在寻找类似的东西?

    for balance in findbalances as! [[String: AnyObject]] {
        let currency = balance["currency"] as! String
        //do something with currency
    }
    

    【讨论】:

    • as 应该是 as!as?
    • 我认为只有在 findbalances 是可选的情况下才会出现这种情况?如果是一个!已经,“as”应该工作了吗?我假设这不是可选的,因为他像他一样直接提取数据......我猜在那种情况下,他根本不需要“as [[String: AnyObject]]”。
    • 因为 Swift 1.2,as 必须是 as!as?
    • 好的,修好了。 @techguy,请注意,如果编译器抱怨,如果最初定义正确,您可以从 findbalances 中删除“as”部分。
    • @Jaconbson 不完全——在编译时不能保证成功的强制转换(例如 AnyObject 到别的东西)必须是 as[?!]。但是有些强制转换在编译时保证每次都能工作(例如另一种方式 - AnyObject 的其他内容),它们仍然可以是 as
    猜你喜欢
    • 2015-09-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2021-05-13
    • 2017-08-20
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多