gpt4 book ai didi

ios - 不能将字典安全放入变量

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

您好,我正在使用 SQLiteDB在我正在编写的移动应用程序中访问 SQLiteDB。我开始编写一个小型模型类来接收 SQLiteDB 返回的行,并使我的程序的其余部分可以轻松访问它们。但是,当我尝试启动结果时,出现了一个我无法理解的错误。

这是我要运行的代码

import Foundation

class DBModel {
static let db = SQLiteDB.sharedInstance()

required init(attributeParams: [String: Any]) {
let attrbitues = attributeParams
}

class func all() -> [DBModel] {
let rawAttributes = db.query("select * from \(tableName())")
print(self)
var objects = [DBModel]()

for record in rawAttributes {
print(record)
objects.append(self.init(attributeParams: record))
}

return objects

}
}

当我运行这段代码时,我得到了这个错误:我得到的错误是:fatal error: can't unsafeBitCast between types of different sizes 从这一行 objects.append(self.init(attributeParams: record))print(record) 的输出是 ["id": 1, "name": Josh]

我是 Swift 的新手。但是,我认为这可能与 SQLiteDB 查询返回带有可选值的散列这一事实有关。但是,我不知道要解决它。

谢谢,

乔希

最佳答案

db.query 返回 [[String:AnyObject]]。然后您对其进行迭代,因此 record 的类型为 [String:AnyObject]。然后,您尝试将其传递给 [String: Any] 类型的参数,但 AnyObjectAny 的子集。该错误有点令人困惑,但与 Swift 在字典上缺乏协变性有关。 [String:Cat] 不是 [String:Animal] 的子类型。同样,[String: AnyObject] 不是 [String: Any] 的子类型。

对于 AnyAnyObject 的问题,Any 实际上是 Swift 已知的任何类型。 AnyObject 只是“对象类型”。许多东西不是对象类型。实际上,对象是 Swift 中的类,尽管如果导入 Foundation 会出现一些令人惊讶的规则弯曲。没有 Foundation,字符串就不是 AnyObject。使用 Foundation,String 被隐式转换为 NSString,这是一个类,AnyObject 也是如此。但在大多数情况下,您可以将 AnyObject 视为“类和类类事物”。

关于ios - 不能将字典安全放入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136608/

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