Статус UISwitch в Firestore - PullRequest
0 голосов
/ 09 июля 2020

В настоящее время я создаю механизм создания пользователей, в котором у меня есть 8 переключателей пользовательского интерфейса, чтобы определить, есть ли у кого-то пищевая аллергия или нет. Я создал @IBOutlet для каждого переключателя, и теперь они включены в документ. У меня нет проблем с добавлением текстовых полей:

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

Я бы хотел расширить этот синтаксис, чтобы добавить статус 8 UISwitch при создании пользователя.

Новое в Firebase и разработка приложений, но пробовал поискать в Google все, что мог придумать. Заранее спасибо за вашу помощь!

ОБНОВЛЕНИЕ Хорошо, я все еще должен делать что-то здесь не так, но я думаю, что приближаюсь:

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
                    
                }
            }
        
        
    }
}

1 Ответ

1 голос
/ 09 июля 2020

Вы можете использовать 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)
...