Firebase-Swift: как добавить каждого созданного пользователя в список друзей при создании? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь создать приложение для социальных сетей, и при этом я пытаюсь создать список друзей в моей базе данных. У меня есть общее представление о том, как будет структурирована база данных, но мне нужна помощь в ее создании, так как я довольно новичок в разработке Swift.

Это моя текущая структура базы данных:

Пользователи

uid_0

имя: "Джон"

электронная почта: "john@gmail.com"

uid_1

имя: "Доу"

электронная почта: "doe@gmail.com"

uid_2

имя: "Пользователь"

электронная почта: "user@gmail.com"

Вот мой регистрационный номер кода контроллера регистрации

import Foundation
import Firebase
import SwiftKeychainWrapper

class SignUpVC: UIViewController {

    @IBOutlet weak var emailField: UITextField!
    @IBOutlet weak var usernameField: UITextField!
    @IBOutlet weak var passField: UITextField!
    @IBOutlet weak var cPassField: UITextField!
    @IBOutlet weak var SignUpButton: UIButton!

    var userUid: String!
    var email: String!
    var username: String!
    var password: String!
    var cPassword: String!
    var friends: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
        // Do any additional setup after loading the view.
    }
    override func viewDidDisappear(_ animated: Bool) {

        if let _ = KeychainWrapper.standard.string(forKey: "uid") {

            performSegue(withIdentifier: "toLogin", sender: nil)
        }
    }

    func printAlert(Header: String, Message: String) {
        let alert = UIAlertController(title: Header, message: Message, preferredStyle: .alert)

        alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))

        self.present(alert, animated: true)
    }

    @IBAction func createAccount (_ sender: AnyObject) {

        if password != cPassword {
            self.printAlert(Header: "Error", Message: "Passwords Do Not Match")
        }
        else{
            guard let email = emailField.text, let password = passField.text, let username = usernameField.text else {
                print("Form is not valid")
                return
            }

            Auth.auth().createUser(withEmail: email, password: password, completion: { (res, error) in

                if let error = error {
                    print(error)
                    if let error = AuthErrorCode(rawValue: error._code) {

                    switch error {
                        case .invalidEmail:
                            self.printAlert(Header: "Error", Message: "invalid email")
                        case .emailAlreadyInUse:
                            self.printAlert(Header: "Error", Message: "in use")
                        default:
                            self.printAlert(Header: "Error", Message: "Create User Error")
                    }
                }
                    return
                }

                guard let uid = res?.user.uid else {
                    return
                }

                //successfully authenticated user
                let ref = Database.database().reference(fromURL: "https://messagingdemo-af075.firebaseio.com/")
                let usersReference = ref.child("users").child(uid)
                let values = ["username": username, "email": email, "password": password]
                usersReference.child("friends").setValue(self.friends)
                usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in

                    if let err = err {
                        print(err)
                        return
                    }

                    self.performSegue(withIdentifier: "toHome", sender: nil)

                })

            })
        }
    }
}

Я пытаюсь создать структуру базы данных, которая выглядит следующим образом:

Пользователи

uid_1

имя: "Джон"

электронная почта: "john@gmail.com"

Друзья

uid_2: = true

uid_3: = false

uid_2

имя: "Доу"

электронная почта: "doe@gmail.com"

uid_3

имя: "Пользователь"

электронная почта: "user@gmail.com"

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

1 Ответ

0 голосов
/ 23 апреля 2019

Вы должны использовать класс модели, который представляет пользователя, взяв кусок кода, который вы написали в вашем View Controller.

Например (см. Документацию Swift Structures and Classes ):

class User {
    var uID: String!
    var email: String!
    var name: String!
    var password: String!
    var friends: [String] = []
}

Затем инициализируйте список User в вашем контроллере представления.

var users: [User]

Таким образом, модель Пользователь (в вашей базе данных) выглядит примерно так же, за исключением свойства friends. Поскольку он имеет тип [String] (список строк), он должен выглядеть следующим образом:

Мы предполагаем, что Джон имеет для друга "user2", "user4" и "user9".

uID : "uID_1"
электронная почта : "john@mail.com"
имя : "Джон"
пароль : "..."
друзья : ["uID_2", "uID_4", "uID_9"] *


Я не буду вдаваться в подробности, но:
Вы также можете сделать это по-другому, отделить список друзей от пользователя.

"uID_1": ["uID_2", "uID_4", "uID_9"] *
"uID_2": ["uID_1", "uID_6"]
...

... Просто сказать, что есть много способов сделать это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...