Ошибка при попытке вызвать setData (from:) в API Cloud Firestore ios. Как я могу это исправить? - PullRequest
2 голосов
/ 04 апреля 2020

Работа в Swift ..

Я пытаюсь вызвать .setData (from:) для записи структуры Codable в документ в облачной базе данных firestore, как указано в документации Firebase здесь:

https://firebase.google.com/docs/firestore/manage-data/add-data#custom_objects

Однако я получаю сообщение об ошибке: "Метки аргументов" (из :) "не соответствуют ни одной из доступных перегрузок"

Странно то, что я смог собрать и запустить симулятор один раз и успешно опубликовал документ, но теперь, очевидно, компилятор вызывает эту ошибку и вызывает сбой сборки. соответствующий код ниже:

строка, которая вызывает сбой сборки:

do {
      try collectionRef.document(lensSet.id.uuidString).setData(from: lensSet)

    } catch let error {
      print(error)
    }

Кодируемая структура:

struct LensSet: Codable, Identifiable {
  var id: UUID

  // Coding KEYS
  private enum CodingKeys: String, CodingKey {
      case id
  }
}

Кажется, что функция, которую они говорят позвонить в документы возможно не существует? Любая помощь приветствуется!

1 Ответ

3 голосов
/ 04 апреля 2020

Документация не совсем неправильная, она просто неполная в одном разделе. Firebase добавил расширение для упрощения создания пользовательских объектов, но не упомянуло это расширение в документации. (Я предполагаю, что это расширение)

Документация по пользовательским объектам является примером кода, который требует расширения

Простое исправление, добавив его в ваш подфайл

pod 'FirebaseFirestoreSwift'

а затем выполните обновление pod либо в терминале, либо в cocoapods.

Затем в вашем классе просто обновите импорт, включив в него этот

import Cocoa
import FirebaseCore
import FirebaseFirestore
import FirebaseFirestoreSwift

Для справки код в документах был такой

try db.collection("cities").document("LA").setData(from: city)

и этот

let docRef = db.collection("cities").document("LA")

 docRef.getDocument { (document, error) in
    let result = Result {
    try document.flatMap {
       try $0.data(as: City.self)
    }
 }

и эта строка

.data(as: City.self)

и

.setData(from:

были «нарушителями спокойствия», которым требовался FirebaseFirestoreSwift

...