簡體   English   中英

不要將所有文本字段更新為 firebase

[英]Don't update all textfields to firebase

我有三個textFields ,當用戶向其中輸入信息時,信息會發送到Firebase

     func buttonMethod() { 
if let uid = FIRAuth.auth()?.currentUser?.uid{
            if let City = City.text{
                if let Major = Major.text{
                    if let College = College.text{

                        let saveObject: Dictionary<String, Any> = [
                            "uid": uid,
                            "City" : City,
                            "Major" : Major,
                            "College" : College
                        ]
                   }
               }
          }
      }



FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).setValue(saveObject)

使用相同的textFields ,用戶可以編輯他們的信息。 並且信息將顯示在另一個視圖控制器的標簽中。

  func loadInfo(){
        if (FIRAuth.auth()?.currentUser) != nil{

            FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in


                if let postsDictionary = snapshot .value as? [String: AnyObject] {
                    for post in postsDictionary {
                        //self.posts.add(post.value)

                        let city = postsDictionary["City"] as! String
                        let major = postsDictionary["Major"] as! String
                        let college = postsDictionary["College"] as! String
                        self.City.text = city
                        self.Major.text = major
                        self.College.text = college
                    }

                }})}
    }

我的問題是,當用戶編輯信息時,如果未編輯textField ,它會將Firebase未編輯的textField的值替換為空字符串。 我希望如果用戶不編輯textField那么Firebase的值應該保持不變。我從這個開始:

 if City.tex t== "" {

 }
 if Major.text=="" {

 }
 if College.text==""{

 }

但我不確定從那里去哪里。

如果文本字段文本為空,則不要將該字段發送到 firebase。 假設用戶尚未編輯城市字段,則不要在方法中添加城市 textField 以將值發送到 firebase。

請嘗試像這樣更新您的buttonMethod()

func buttonMethod() {
    if let uid = FIRAuth.auth()?.currentUser?.uid{

        var tempObject = [String:Any]()
        tempObject["uid"] = uid
        if !City.text.isEmpty {
            tempObject["City"] = City.text
        }

        if !Major.text.isEmpty{
            tempObject["Major"] = Major.text
        }

        if !College.text.isEmpty{
            tempObject["College"] = College.text
        }

        let saveObject:Dictionary<String,Any> = tempObject

}

使用updateChildValues()函數更新updateChildValues()的數據,而不是將對象保存到updateChildValues()

我認為還有另一種解決方案:您可以在文本字段中顯示原始值/信息,而不是將它們留空。 因此,嘗試使用以下結構刪除代碼中的文本字段:

import Foundation
import SwiftUI

struct TextFieldWithDefaultValue: View {

    var model:userModel    // Replace it with your own view model
    var textFieldName: String
    @State var editedValue: String

    init(model: userModel, text: String) {
        self.model = model
        self.textFieldName = text
        switch self.textFieldName {
        case "Name": self._editedValue = State(wrappedValue: model.getName())
        case "Bio": self._editedValue = State(wrappedValue: model.getBio())
        case "Interest": self._editedValue = State(wrappedValue: model.getInterest())
        default:
            self._editedValue = State(wrappedValue: "No records")
        }
    }
    
    var body: some View {
        TextField(textFieldName, text: $editedValue)
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM