我有三个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
,则会将textField
中未编辑的Firebase
的值替换为空字符串。我希望如果用户不编辑textField
,那么Firebase
中的值应该保持不变。我从这开始:
if City.tex t== "" {
}
if Major.text=="" {
}
if College.text==""{
}
但我不确定从哪里去。
答案 0 :(得分:0)
如果文本字段文本为空,则不要将该字段发送到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
}
不是将对象保存到firebase,而是使用updateChildValues()
函数
答案 1 :(得分:0)
我认为还有另一种解决方案:您可以在文本字段中显示原始值/信息,而不是将它们留空。因此,尝试使用以下结构删除代码中的文本字段:
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)
}
}