ios - 如何快速从结构中检索值

标签 ios swift struct swift3

我正在将 JSON 数据转换为一个结构,然后将该结构添加到一个数组,但在执行此操作时我无法访问该结构中的值。

首先我有我的结构:

struct Skill {
    var name: String

    init(dictionary: [String: Any]){
    name = dictionary["name"] as! String
    }    
}

然后在另一个类中,我将我的 JSON 数据转换为结构并将其添加到数组中。我可以访问 for 循环中的值(即 skillDict.name),但我无法从另一个类中的数组访问它们。

var skillArray: NSMutableArray = []
fun getJSON(){
….
if let skill : NSArray = jsonRoot["skills"] as? NSArray
    {

        for each in skill{
            var skillDict = Skill(dictionary: each as! [String : Any])

            skillArray.add(skillDict)      
            }

    }

当我从另一个类运行下面的代码时,我在第一行打印时收到此错误:“此类的键名不符合键值编码”。我也尝试过使用 The second print line 正确打印我的所有对象,但我无法访问 name 值。

for each in skillArray{
       print(skillArray.value(forKey: "name"))
        print(each) //this line will print correctly, so I know the correct data is in the array

    }

我还尝试在 for 循环内外使用以下代码:

print(skillArray.map { $0["name"] as? String })

但我收到编译器错误“Type Any 没有下标成员”

如何正确访问名称值?

最佳答案

你有两种方法来修复它,要么创建 [Skill] 类型的 skillArray 而不是 NSMutablearray 或转换 $0 在 map 函数中首先是 Skill 类型,然后使用底层属性。

例如,这可能会有所帮助:

print(skillArray.map { ($0 as! Skill).name })

关于ios - 如何快速从结构中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759002/

相关文章:

ios - 模拟标签外观的按钮(有点)

swift UITapGestureRecognizer 慢

PHP 和 Python 解包从同一来源返回不同的结果

c++ - 2个类似typedef定义的差异

去嵌套结构

嵌入 UISplitViewController 时,UINavigationBar 中缺少 iOS11 UISearchBar

ios - 我怎样才能在 iOS 5 中使用 CMDeviceMotion 获取设备的标题

json - swift 4 : JSONDecoder fails in one specific case - "The operation could not be completed"

ios - 使用自动布局检索 subview 的正确位置

json - 展开可选元素时出错