Swift Map数组意外参数类型

时间:2019-01-07 15:59:45

标签: arrays swift cloudkit

我在地图上有以下代码,为什么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)
  }

2 个答案:

答案 0 :(得分:1)

Because the map function also exists on Optional。请注意,在?之后没有records。您可能想先将其解包在guard中,或添加?以在整个表达式上使用可选链。

答案 1 :(得分:1)

当您使用完成处理程序返回Optional值和Optional错误时,在检查错误是否为nil时,应始终可选地绑定该值。这将解决由于您尝试调用Optional的{​​{1}}而不是map而引起的问题。

Array