将来自 CKRecord 的信息传递给用户定义的 class 类型

Pass the information from CKRecord to user defined class type

我必须遵循 class 类型

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
  }

并且在我的 viewcontroller 中,我想显示我从 cloudkit 中获取的姓名列表。所以,我正在尝试找到一种方法将 CKRecord 转换为我的 class 类型 Recipe。

我试过了但是失败了

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({ [=12=].value as? Recipe }) // gives error ambigous value
                self?.tableView.reloadData()
              
            }
        }

Records 是作为 CKRecord

从 cloudkit 中获取的变量

items是Recipe数组,[Recipe]

我想将数据从 条记录 传输到 条记录

你不能转换类型。你必须打电话给 init.

首先去掉init方法中的database参数,显然不需要

init?(record: CKRecord) { …

然后替换

self?.items = records.compactMap({ [=11=].value as? Recipe })

self?.items = records.compactMap(Recipe.init)