Ios Swift:如何将[String:Any]数组转换为特定数组

Ios Swift:如何将[String:Any]数组转换为特定数组,ios,arrays,swift,casting,Ios,Arrays,Swift,Casting,我有一个简单的结构: protocol DocumentSerializable { init?(dictionary:[String:Any]) } struct Item { var title:String var text:String? var dictionary:[String:Any] { return [ "title":title, "text":text, ]

我有一个简单的结构:

protocol DocumentSerializable {
    init?(dictionary:[String:Any])
}

struct Item {
    var title:String
    var text:String?
    var dictionary:[String:Any] {
        return [
            "title":title,
            "text":text,
        ]
    }
}

extension Item : DocumentSerializable {
    init?(dictionary: [String : Any]) {
        guard let title = dictionary["title"] as? String,
            let text = dictionary["text"] as? String? else {return nil}

        self.init(title: title, text: text)
    }
}
当我收到我的json时,我把它放在一个数组中

if let array = result?.data as? Array<[String:Any]> {...
如果let array=result?。数据为?数组{。。。
如何将此数组转换为项目数组?
var itemsArray=[Item]()

这两个数组的结构完全相同


感谢使用
compactMap
,它还处理
nil
情况:

itemsArray = array.compactMap{ Item(dictionary: $0) }
但是,在Swift 4中,强烈建议使用
Codable
协议

struct Item :Decodable {
 let title:String
 let text:String?
}
//


您使用“Casting”标记,但显然,不要误解它的作用。相反,请执行循环并使用字典在相应索引处初始化每个项。或者使用更“快速”的代码,如
itemsArray=array.map({Item.init(dictionary:$0)})
谢谢,但它不起作用。它返回一个空数组如果让测试,你是否通过了
测试?你确定
结果。数据是一个字典数组?结果中有什么?数据
?数组的打印是:[[“title”:一个标题,“text”:一个文本],“title”:一个标题,“text”:一个文本],“title”:一个标题,“text”:一个文本]]应该是这样的[[“标题”:“22222”,“文本”:“Weewewew”],[“标题”:“22222”,“文本”:“Weewewew”]]谢谢,但它不起作用。如果您的代码通过了
测试(如果let
测试成功),并且包含带有
标题
文本
键的词典,则返回空数组。我已简化了此处的属性,以使代码更具可读性。所有必需属性(标题)从服务器上找我。可选属性不是全部。这就是问题所在?根据代码,初始值设定项仅在所有密钥都可用时创建对象。谢谢,现在我将尝试使用所有属性
do {

    let root = try JSONDecoder().decode([Item].self, from:jsonData)

    print(root)

}
catch {

    print(error)
}