繁体   English   中英

如何通过 Swift 3 上的字典数组内的键访问字典值?

[英]How to access dictionary value by key inside array of dictionary on Swift 3?

我已经有一段时间没有快速开发了。 今天我从我的客户那里收到了关于我的旧项目的错误报告。 问题是我曾经像字典 [key]一样轻松地从我的字典中访问值,然后我已经得到了该值,但是今天我通过这样做得到了以下错误:

类型“NSFastEnumerationIterator.Element”(又名“Any”)没有下标成员

这是我的代码:

var rollStatusArray = NSMutableArray()

for statusDict in rollStatusArray{
  if statusId == "\(statusDict["mark_status_id"]!!)"{
    return "\(statusDict["mark_status_name"]!!)"
  }
}

如何在 swift 3 上访问字典值?

在 Swift 中使用原生类型Array/[]而不是NS(Mutable)Array

if let dicArray = rollStatusArray.objectEnumerator().allObjects as? [[String:Any]] {
    for statusDict in dicArray { 
        //Here compiler know type of statusDict is [String:Any]

        if let status_id = statusDict["mark_status_id"] as? String, status_id == statusId {
             return "\(statusDict["mark_status_name"]!)" 
        }
    }
}

注意我强制包装mark_status_name值,您可以使用Nil coalescing operator返回空字符串以删除强制包装。

您需要通过这种方式告诉编译器您的statusDict的类型:

for statusDict in rollStatusArray {

    if let obj = statusDict as? [String: AnyObject] {
        let statusIdFromDict = obj["mark_status_id"] as? String ?? ""
        if statusId == statusIdFromDict {

            return statusIdFromDict
        }
    }
}

使用 Swift 3,您可以通过以下方式访问字典值:

var rollStatusArray = NSMutableArray()
for statusDict in rollStatusArray{
    if statusId == "\((statusDict as! NSDictionary)["mark_status_id"]!)"{
            return "\((statusDict as! NSDictionary)["mark_status_name"]!)"
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM