首页 > 解决方案 > 将信息从 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是配方数组,[配方]

我想将数据从记录传输到项目

标签: swiftxcodecloudkit

解决方案


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

先把databaseinit方法中的参数去掉,显然不需要

init?(record: CKRecord) { …

然后更换

self?.items = records.compactMap({ $0.value as? Recipe })

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

推荐阅读