Получить отдельные элементы массива - PullRequest
0 голосов
/ 06 октября 2018

Я читаю данные из базы данных Firebase и сохраняю их в объекте сообщения. Как я могу получить доступ к каждому элементу в этом массиве?то есть как я могу использовать строку City, как я хочу назначить это метке.То же самое с каждым другим элементом в массиве.

    firebaseDB.collection("user").document(key).collection("address").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        }
        else {
            self.dataArr.removeAll()
            for document in querySnapshot!.documents {
                //print("\(document.documentID) => \(document.data())")
                let msgdata = document.data() as! [String:Any]
                var msgObj = Details()
                if let city = msgdata["city"] as? String {

                    msgObj.city = city
                }

                if let country = msgdata["country"] as? String {

                    msgObj.country = country
                }
                if let county = msgdata["county"] as? String {

                    msgObj.county = county
                }

                if let lineOne = msgdata["lineOne"] as? String {

                    msgObj.lineOne = lineOne
                }
                if let lineTwo = msgdata["lineTwo"] as? String {

                    msgObj.lineTwo = lineTwo
                }
                if let postCode = msgdata["postCode"] as? String {

                    msgObj.postCode = postCode
                }
                self.dataArr.append(msgObj)

            }


        }
    }

Мне нужно будет получить доступ к каждому элементу, так как у меня есть другая функция, которая возьмет каждый элемент и поместит его на метку в моем ViewController

Что-то вроде этого - то, что я хочу иметь

func DisplayAddress(){
 city.text = city
 postCode.text = postCode
}

1 Ответ

0 голосов
/ 06 октября 2018

Возможно, я неправильно читаю вопрос, но, пытаясь прочитать в ваш вопрос, я думаю, что терминология может быть там, где требуется разъяснение;Объект vs Array

Объект имеет свойства - давайте рассмотрим объект Details ()

var msgObj = Details()

, который содержит адресную информацию для одного пользователя.Таким образом, концептуально это будет выглядеть в FireStore

users
  this_user
    address
      city: "some city"
      country: "some country"
      county: "some county"
      line1: "line one"

, «документы» - это элементы, хранящиеся в коллекции адресов

  city: "some city"
  country: "some country"
  county: "some county"
  line1: "line one"

, а ваш объект Details () имеет свойства, которыесоответствуют этим документам и хранят их как свойства внутри объекта;город, округ и т. д.

 msgObj.city = city
 msgObj.country = country

С другой стороны, массив содержит серию объектов , а не свойств.например, массив обычно , а не содержит город, страну и т. д., но он будет содержать серию объектов Details (), и каждый из этих объектов Detail () имеет свои свойства города, страны и т. д. Например, предположим, чтовы хотите работать с адресами нескольких разных пользователей - вы должны создать объект Details () для каждого пользователя, который содержит информацию об их адресе и добавить каждый из них в массив.

self.dataArry[0] = the Details() objects of one user
self.dataArry[1] = the Details() object of another user
self.dataArry[2] = the Details() object of a third user

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

Чтобы ответить на ваш вопрос, если вы работаете с адресной информацией одного пользователя, нет необходимости в массиве,вы можете просто сохранить его как одну переменную объекта Details () внутри класса.

class ViewController: UIViewController {
    var myUserAddress = Details()

    func to get this users address documents from FireStore {
        if let city = msgdata["city"] as? String {
           self.myUserAddress.city = city
        }
        if let country = msgdata["country"] as? String {
           self.myUserAddress.country = country
        }
        //remember that the properties are only valid from here on
        //as FireStore is asychronous
        self.DisplayCity()
        self.DisplayLocation()
    }

    //and then later on when you want to display those properties
    func DisplayCity() {
      let city = self.myUserAddress.city
      print(city)
    }
    func DisplayLocation() {
      let lon = self.myUserAddress.logitude
      let lat = self.myUserAddress.latitude
      //show the location on a map via lon & lat
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...