#swift #google-cloud-firestore
#swift #google-облако-firestore
Вопрос:
Здравствуйте, я пытаюсь проанализировать массив строк в dao. Для этого я создал это:
func getUsersAbos(){
let userid = Auth.auth().currentUser?.uid
let docRef = db.collection("Users").document(userid!)
docRef.getDocument { (document, error) in
if let city = document.flatMap({
$0.data().flatMap({ (data) in
return UserBlogObject(channelAbos: data)
})
}) {
print("City: (city)")
} else {
print("Document does not exist")
}
}
}
и вот мой Dao:
импортируйте базовый класс UserBlogObject{ var channelAbos = Any
init(channelAbos: [String]) {
self.channelAbos = channelAbos
}
init(){
}
}
я получаю сообщение об ошибке в этой строке:
return UserBlogObject(channelAbos: data)
Не удается преобразовать значение типа ‘[String: Any]’ в ожидаемый тип аргумента ‘[String]’
пожалуйста, обратите внимание, что я хочу загрузить только массив внутри документа, а не весь документ.
Комментарии:
1. Сначала, пожалуйста, отредактируйте свой вопрос и исправьте отступы и форматирование кода. Пользователям намного проще предоставлять правильные ответы, когда код легко читается. И чтобы ответить на ваш вопрос, Firestore выдает
Dictionary
of[String : Any]
, где строка является ключом для значения, а Any — само значение. Итак, обработайте словарь в вашем методе инициализации вместо массива[String]
2. спасибо, но я хочу получить только массив для ключевых channelAbos в моем документе
3. Затем вы можете использовать [«ключ»] для получения массива. Я опубликую быстрый ответ. Надеюсь, это поможет
Ответ №1:
Вы можете сделать что-то вроде этого. Я не думаю, что есть необходимость чрезмерно усложнять функцию с помощью flatMap()
, но вы можете это сделать, если хотите. Вот пример кода, показывающий, как вы могли бы создать свой метод.
func getUsersAbos() {
guard let userID = Auth.auth().currentUser?.uid else { return }
let docRef = db.collection("Users").document(userID)
docRef.getDocument { (document, error) in
if error != nil { return }
guard let data = document?.data() else { return }
guard let channelAbos = data["channelAbos"] as? [String] else { return }
let userBlogObject = UserBlogObject.init(channelAbos: channelAbos) // This is the created object. Handle it.
}
}
И ваш класс:
class UserBlogObject {
var channelAbos : [String]
init(channelAbos: [String]) {
self.channelAbos = channelAbos
}
}