我正在尝试创建一个社交媒体应用程序,并且这样做是在数据库中创建一个朋友列表。我对数据库的结构有一个大致的了解,但是由于我对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添加到每个用户朋友列表中的地方。但是,我不知道如何快速以编程方式编写该代码,希望能获得一些帮助。
答案 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”]
...
...只是说有很多方法可以做到...