Тема решена после того, как я получил помощь от комментариев.
Я видел другую ветку об этом, но она не помогла мне после нескольких часов попыток.Так что я не выбрал бы создание новой темы.(Извините за это)
В начале урока у меня есть это:
//Firestore connection
let db = Firestore.firestore()
//Create an array of items to insert into pickerview
var dogsArray: [String] = []
Внутри ViewDidLoad есть делегат и источник данных для выбора средства выбора.
override func viewDidLoad()
{
super.viewDidLoad()
getDogs()
self.pickerView.delegate = self
self.pickerView.dataSource = self
}
И чуть-чуть, я получил этот код:
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
return dogsArray[row]
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
return dogsArray.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
labeltest.text = dogsArray[row]
}
func getDogs()
{
db.collection("Dogs").getDocuments
{ (QuerySnapshot, err) in
if err != nil
{
print("Error getting documents: \(String(describing: err))");
}
else
{
for document in QuerySnapshot!.documents
{
let document = QuerySnapshot!.documents.first
let data = document!.data()
data.forEach { (item) in
if let dogOneData = data["Dog1"] as? String {
self.dogsArray.append(dogOneData)
}
if let dogTwoData = data["Dog2"] as? String {
self.dogsArray.append(dogTwoData)
}
if let dogThreeData = data["Dog3"] as? String {
self.dogsArray.append(dogThreeData)
}
}
self.pickerView.reloadAllComponents()
}
}
}
Ошибка: невозможно преобразовать значение типа 'Any?'закрыть результат типа "Строка?"при возврате (dogElement.value как? [String: Any]) ?. values.first
Поэтому я пытаюсь выбрать данные из Firestore и вставить их в окно выбора.Но данные, которые я хочу выбрать, - это данные, которые я ввел при регистрации в приложении.Так что все уникальны.(Например, если вы регистрируетесь в приложении, ваши имена собак отличаются от моих.)
Поэтому я пытаюсь выбрать данные от конкретного пользователя.Но я понятия не имею, как это сделать.И результат пока пуст, я вообще не вижу никаких данных в окне выбора.Итак, я хотел бы получить помощь по этому вопросу!Ты бы сделал мою пятницу хорошей.:)
Структура базы данных:
РЕЗУЛЬТАТ ПОСЛЕ РЕШЕНИЯ:
//Function getDogs()
func getDogs()
{
//Authentication
let authentication = Auth.auth().currentUser?.uid
//Choosing collection
db.collection("users").document(authentication!).collection("Dogs").getDocuments()
{ (QuerySnapshot, err) in
if err != nil
{
print("Error getting documents: \(String(describing: err))");
}
else
{
//For-loop
for _ in QuerySnapshot!.documents
{
self.dogsArray.removeAll()
let document = QuerySnapshot!.documents.first
let data = document!.data()
data.forEach { (item) in
if let dogOneData = data["Dog1"] as? String {
self.dogsArray.append(dogOneData)
}
if let dogTwoData = data["Dog2"] as? String {
self.dogsArray.append(dogTwoData)
}
if let dogThreeData = data["Dog3"] as? String {
self.dogsArray.append(dogThreeData)
}
}
self.pickerView.reloadAllComponents()
}