swift - 将信息从 CKRecord 传递到用户定义的类类型
问题描述
我必须关注班级类型
class Recipe {
private let id: CKRecord.ID
let name: String
let coverPhoto: CKAsset?
init?(record: CKRecord, database: CKDatabase) {
guard
let name = record["name"] as? String
else { return nil }
id = record.recordID
self.name = name
coverPhoto = record["coverPhoto"] as? CKAsset
}
在我的视图控制器中,我想显示从 cloudkit 获取的名称列表。所以,我试图找到一种将 CKRecord 转换为我的类类型食谱的方法。
我试过这个但失败了
let query = CKQuery(recordType: "GroceryItem", predicate: NSPredicate(value:true))
database.perform(query, inZoneWith: nil) { [weak self] records, error in
guard let records = records,error == nil else {
return
}
DispatchQueue.main.async {
self?.items = records.compactMap({ $0.value as? Recipe }) // gives error ambigous value
self?.tableView.reloadData()
}
}
Records是从 cloudkit 作为 CKRecord 获取的变量
items是配方数组,[配方]
我想将数据从记录传输到项目。
解决方案
您不能转换类型。你必须打电话init
。
先把database
init方法中的参数去掉,显然不需要
init?(record: CKRecord) { …
然后更换
self?.items = records.compactMap({ $0.value as? Recipe })
和
self?.items = records.compactMap(Recipe.init)
推荐阅读
- android - Firestore 中的内部错误
- apache-spark - 为什么在 Windows 上使用本地部署模式使用“ls -F”触发应用程序?
- php - php7 与 mongodb 如何更新到密钥(包含点)
- laravel - Laravel show() 参数为空
- .net - EF Core - 外国匹配计数的计算列
- javascript - onclick 方法给了我一个 Uncaught TypeError: Cannot set property 'onclick' of null 错误
- mysql - MySQL server-8 未与 SQLyog-13 连接
- ios - An iOS app internal size?
- django - Django signals not working for my directory structure
- php - 使用 wget 从打开的目录下载 PHP 文件会给出空/空白的 PHP 文件