UISwitch Status 到 Firestore

UISwitch Status to Firestore

我目前正在构建一个用户创建机制,我有 8 个 UI 开关来确定某人是否对食物过敏。我为每个开关创建了一个@IBOutlet,现在将它们包含在文档中。我在添加文本字段时没有问题:

let db = Firestore.firestore()
db.collection("users").addDocument(data: ["firstname":firstname, "lastname":lastname, "username":username, ]

我想做的是扩展该语法以在用户创建时添加 8 UISwitch 的状态。

Firebase 和应用程序开发的新手,但尝试了谷歌搜索我能想到的一切。预先感谢您的帮助!

更新 好的,所以我一定还是在这里做错了什么,但我想我已经接近了:

import UIKit
import FirebaseAuth
import Firebase

class SignUpViewController: UIViewController {

    @IBOutlet weak var firstNameTextField: UITextField!
    
    @IBOutlet weak var lastNameTextField: UITextField!
    
    @IBOutlet weak var usernameTextField: UITextField!
    
    @IBOutlet weak var emailTextField: UITextField!
    
    @IBOutlet weak var passwordTextField: UITextField!
    
    @IBOutlet weak var milkSwitch: UISwitch!
    
    @IBOutlet weak var peanutSwitch: UISwitch!
    
    @IBOutlet weak var wheatSwitch: UISwitch!
    
    @IBOutlet weak var treeNutSwitch: UISwitch!
    
    @IBOutlet weak var fishSwitch: UISwitch!
    
    @IBOutlet weak var shellFishSwitch: UISwitch!
    
    @IBOutlet weak var eggSwitch: UISwitch!
    
    @IBOutlet weak var soySwitch: UISwitch!
    
    @IBOutlet weak var addAFamilyButton: UIButton!
    
    @IBOutlet weak var signUpButton: UIButton!
    
    @IBOutlet weak var errorLabel: UILabel!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        setUpElements()
    }
    func setUpElements (){
        errorLabel.alpha = 0
    }
    func showError(_ message:String) {
        errorLabel.text = message
        errorLabel.alpha = 1
    }
    //Check the fields and validate that data is correct.
    func validateFields() -> String? {
    
        //Check that all fields are filled in
        if firstNameTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
            lastNameTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
            usernameTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
            emailTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" ||
            passwordTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" {
            
            return "Please fill in all fields."
        }
        
        //Check if password is secure
        let cleanedPassword = passwordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        
        if Utilities.isPasswordValid(cleanedPassword) == false {
      
            // Password isn't secure enough
            return "Please make sure your password is at least 8 characters, contains a special character and a number"
        }
        
        return nil
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

    @IBAction func signUpTapped(_ sender: Any) {
        // Validate the fields
        let error = validateFields()
        
        if error != nil {
            // There's something wrong with the fields, show error message
            showError(error!)
        }
        else {
        // Cleaned Versions of the data
            let firstname = firstNameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let lastname = lastNameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let email = emailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let password = passwordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let username = usernameTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let milk = milkSwitch
            let peanut = peanutSwitch
            let wheat = wheatSwitch
            let treenut = treeNutSwitch
            let fish = fishSwitch
            let shellfish = shellFishSwitch
            let egg = eggSwitch
            let soy = soySwitch
            
            
        // Create the user
            Auth.auth().createUser(withEmail: email, password: password) { (result, err) in
                // Check for errors
                if err != nil {
                    //There was an error creating the user
                    self.showError("Error creating user")
                }
                else {
                    
                    // User was created successfully
                    let db = Firestore.firestore()
                    db.collection("users").addDocument(data: ["firstname":firstname, "lastname":lastname, "username":username, "uid": result!.user.uid, "milk":milkSwitch.isOn, "peanut":peanutSwitch.isOn, "wheat":wheatSwitch.isOn, "treenut":treeNutSwitch.isOn, "fish":fishSwitch.isOn, "shellfish":shellFishSwitch.isOn, "egg":eggSwitch.isOn, "soy":soySwitch.isOn ]) { (error) in
                        if error != nil {
                            //Show error message
                            self.showError("Your allergies have not been saved. Please login to your account")
                        }
                    }
                    // Transiition to the home screen
                    
                }
            }
        
        
    }
}

您可以使用 isOn 获取 UISwitch

的状态
let peanutAllergySwitch = UISwitch()    

let db = Firestore.firestore()
let data = [
  "firstname":firstname, 
  "lastname":lastname, 
  "username":username, 
  "allergicToPeanuts": peanutAllergySwitch.isOn
]

db.collection("users").addDocument(data: data)