Назначьте имя пользователя из firestore - PullRequest
0 голосов
/ 07 июля 2019

Я создаю свое первое приложение (и новичок в Swift).Когда я захожу с Facebook, имя и адрес электронной почты сохраняются в Firestore.Я пытаюсь установить имя из Facebook для переменной, чтобы использовать ее в других местах, но я не могу присвоить значение, всегда показывает «nil» в консоли.Кто-нибудь может мне помочь, пожалуйста?

  1. Я установил переменную
var userN: String?
Я получаю данные из Firestore
func readDatabase(){

    let db = Firestore.firestore()
    let docRef = db.collection("users").document("email")


    docRef.getDocument { (document, error) in
        if let document = document, document.exists {
            let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
            print("Document data: \(dataDescription)")

            let data = document.data()

            let userName = data!["name"]! as! String
            print(userName)

            let userEmail = data!["email"]! as! String
            print(userEmail)

let containerController = ContainerController()
            let containerController.userN = userName;
            return
        }
    }

}

Я хочу назначить userN = userName, чтобы использовать его в другом представлении Как я могу это сделать?спасибо

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

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

Предположим, ваш Firestore выглядит так

root
   users
      uid_0
         name: "users name"
      uid_1
         name: "another users name"

и когда приложение загружается, мы хотим прочитать имя пользователя и сохранить его в переменной для вашего вопроса:

переменная для использования в других местах

Вот как это может выглядеть

class ViewController: NSViewController {

    var usersName = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        FirebaseApp.configure()
        self.db = Firestore.firestore()
        let settings = self.db.settings
        self.db.settings = settings
        self.readUserName()
    }

    func readUsersName() {
        let users = self.db.collection("users")
        let thisUser = users.document("uid_1")
        thisUser.getDocument(completion: { documentSnapshot, error in
            if let error = error {
                print(error.localizedDescription)
                return
            }
            let name = documentSnapshot?.get("name") as! String
            self.usersName = name
        })
    }

Код устанавливает Firestore, считывает имя пользователя из документа uid_1 и сохраняет его в переменной, где оно может быть использовано позже.

Предположим, мы хотим позволить пользователю изменить свое имя. Есть 100 способов сделать это; Передав данные через segue, используйте метод делегата или откройте контроллер подробного представления, и, прежде чем он закроется, этот мастер-контроллер прочитает обновленное имя из textField и сохранит данные. Вы можете даже передать пользовательский uid, а затем в подробном viewcontroller прочитать документ через этот uid, а затем обновить его после закрытия. Однако все они выходят за рамки вопроса.

0 голосов
/ 07 июля 2019

Если вы используете StoryBoards, вы можете передать это через функцию segue;

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "YourStoryBoardSegue" {
            if let viewController = segue.destination as? ContainerController {
                viewController.userN = userName
            }    
        }
   }

В противном случае рекомендуется использовать метод делегата.

Переполнение стека поиска для лучших практик с использованием делегатов для передачи данных.

...