Firebase-Swift:创建后如何将每个创建的用户添加到朋友列表?

时间:2019-04-23 06:52:38

标签: ios swift database firebase

我正在尝试创建一个社交媒体应用程序,并且这样做是在数据库中创建一个朋友列表。我对数据库的结构有一个大致的了解,但是由于我对Swift开发还很陌生,因此需要数据库的实际代码方面的帮助。

这是我当前的数据库结构:

  

用户

     
    

uid_0

         
      

名称:“约翰”

             

电子邮件:“ john@gmail.com”

    
         

uid_1

         
      

名称:“ Doe”

             

电子邮件:“ 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”

             

电子邮件:“ doe@gmail.com”

    
         

uid_3

         
      

名称:“用户”

             

电子邮件:“ user@gmail.com”

    
  

我假设这是在注册新用户时必须将每个创建的用户ID添加到每个用户朋友列表中的地方。但是,我不知道如何快速以编程方式编写该代码,希望能获得一些帮助。

1 个答案:

答案 0 :(得分:0)

您应该通过使用您在View Controller中编写的代码段来使用表示用户的模型类。

例如(请查看Swift Structures and Classes文档):

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

然后在您的View Controller中初始化User的列表。

var users: [User]

因此(数据库中的) 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”]
  ...

...只是说有很多方法可以做到...