首页 > 解决方案 > Swift映射数组意外的参数类型

问题描述

我有以下带有地图的代码,为什么它log也是一个数组而不仅仅是一个CKRecord对象?

sharedDatabase.perform(query, inZoneWith: nil) { (records, error) in
  if let error = error {
    reject("there is error", "no logs", error)
  }else{
    NSLog("found results")
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let resultLogs = records.map { log in
      // Log is also an array: [CKRecorder] so I'll get error:
      // Value of type '[CKRecord]' has no member 'object'
      return [
        "log": log.object(forKey: "log") ?? "N/A" as __CKRecordObjCValue,
        "createdAt": formatter.string(from: log.creationDate ?? Date.init())
      ]
    }
    resolve(resultLogs)
  }

标签: arraysswiftcloudkit

解决方案


因为map函数也存在于Optional. 注意缺少?after records。您可能想首先解开它guard,或者?在整个表达式上添加以使用可选链接。


推荐阅读