Ios 如何在swift中从结构中检索值
我将JSON数据转换为一个结构,然后将该结构添加到一个数组中,但是当我这样做时,在访问结构中的值时遇到了问题 首先,我得到了我的结构:Ios 如何在swift中从结构中检索值,ios,swift,struct,swift3,Ios,Swift,Struct,Swift3,我将JSON数据转换为一个结构,然后将该结构添加到一个数组中,但是当我这样做时,在访问结构中的值时遇到了问题 首先,我得到了我的结构: struct Skill { var name: String init(dictionary: [String: Any]){ name = dictionary["name"] as! String } } 然后在另一个类中,我将JSON数据转换为结构并将其添加到数组中。我可以访问for循环(即skillDict.
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)
}
}
当我从另一个类运行下面的代码时,我在第一个打印行上得到了这个错误:“这个类不符合密钥名称的键值编码”。我还尝试使用第二个打印行正确打印所有对象,但无法访问名称值
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 })
但是我得到一个编译器错误“类型Any没有下标成员”
如何正确访问名称值?有两种方法可以修复它:首先将
[Skill]
类型的skillArray
替换为NSMutablearray
,或者在map函数中将$0
转换为Skill
类型,然后使用基础属性
e、 例如,这可能会有帮助:
print(skillArray.map { ($0 as! Skill).name })
如果您将
skillArray
声明为:
var skillArray = Array<Skill>()
如果要使用下标键isEqual来表示“name”,则返回name
struct Skill {
var name: String
init(dictionary: [String: Any]){
name = dictionary["name"] as! String
}
subscript(_ name: String) -> String? {
get {
return name == "name" ? self.name : nil
}
}
}
此代码可以使用
print(skillArray.map{$0[“name”]as?String})
work将数组实例化为[Skill]
:
var skills = [Skill]()
...
let names = skills.map { $0.name }
…如果您使用
flatMap{($0 as?Skill).name}
,它将跳过强制转换失败的元素,而不是崩溃
var skills = [Skill]()
...
let names = skills.map { $0.name }