gpt4 book ai didi

ios - Swift & Firebase - 无法转换类型为 '__NSDictionaryM' 的值

转载 作者:行者123 更新时间:2023-11-28 15:52:02 24 4
gpt4 key购买 nike

我将 Swift 与 Firebase 一起使用,我对这个错误有点困惑:Could not cast value of type '__NSDictionaryM' (0x122ab6130) to 'Repeat.Expression' (0x1100004c0)。

这是我使用的 JSON 文件的示例:

{
"levels" : {
"level1" : {
"coverImage" : "lvl1",
"expressions" : [ {
"expression" : "Yes",
"id" : 0
}, {
"expression" : "Yes",
"id" : 1
}, {
"expression" : "Yes",
"id" : 2
}, {
"expression" : "Yes",
"id" : 3
} ],
"id" : 0,
"title" : "Essentiel"
},
"level2" : {
...
},
}
}

这是我使用的两个模型:

struct Level {
let id : Int
let coverImage : String
let title : String
let expressions : [Expression]
}

struct Expression {
let id : Int
let expression : String
}

最后,这是我用来获取关卡的函数:

var levels = [Level]()

func fetchLevels() {

FIRDatabase.database().reference().child("levels").observe(.childAdded, with: { (snapshot) in

if let dictionary = snapshot.value as? [String: AnyObject] {

if let levelId = dictionary["id"], let levelCoverImage = dictionary["coverImage"], let levelTitle = dictionary["title"], let levelExpressions = dictionary["expressions"] {
let level = Level(
id: levelId as! Int,
coverImage: levelCoverImage as! String,
title: levelTitle as! String,
expressions: levelExpressions as! [Expression]
)
self.levels.append(level)
}


DispatchQueue.main.async{
self.collectionView?.reloadData()
}


}
}, withCancel: nil)
}

看来问题出在 expressions: levelExpressions as 行! [表达式]

非常感谢您的帮助。

祝你有美好的一天。

最佳答案

let levelExpressions = dictionary["expressions"]

上面的行返回字典数组,即 [[String:Any]] 并且需要将该值映射到您的结构表达式中。这可以通过两种方式完成:-

1) 您可以使用 ObjectMapper对上述代码的返回值进行类型转换。

2) 通过解析的返回值手动分配Expression对象让 levelExpressions = dictionary["expressions"] 作为! [[String:Any]] 并将它们分配给属性 idexpression

关于ios - Swift & Firebase - 无法转换类型为 '__NSDictionaryM' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com