[英]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.