(Swift)将UITextField中的数据保存到Firebase Firestore中



Currenty显示的代码将字符串"TEST"保存在Firestore数据库中。我需要做的是在按下按钮时保存输入UITextField的文本,并将数据保存在Firestore数据库中。

对于我的IBAction函数,我相信它是正确的,但我不知道如何获取train变量并将其放置在dict中而不会出错。

import Foundation
import UIKit
import Firebase
import FirebaseUI
class TrainViewController: UIViewController{
@IBOutlet weak var trainField: UITextField!
@IBOutlet weak var locationField: UITextField!
@IBOutlet weak var engineField: UITextField!
@IBAction func saveButton(_ sender: UIButton) {
var train: String = trainField.text!
}
override func viewDidLoad() {
super.viewDidLoad()
trainField.delegate = self
var dict = [String:String]()
dict.updateValue("TEST", forKey: "train")
let db = Firestore.firestore()
db.collection("users").addDocument(data: dict)
}
}
extension TrainViewController : UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
} 
}

您可能需要从操作中的字段中收集字符串,然后将其传递给函数进行保存。

class TrainViewController: UIViewController{
@IBOutlet weak var trainField: UITextField!
@IBOutlet weak var locationField: UITextField!
@IBOutlet weak var engineField: UITextField!
@IBAction func saveButton(_ sender: UIButton) {
let trainText = trainField.text!
self.saveText(theText: trainText)
}
override func viewDidLoad() {
super.viewDidLoad()
}
func saveText(theText: String) {
let db = Firestore.firestore()
let dict = ["train_text": theText]
db.collection("users").addDocument(data: dict)
}
}

将导致以下内容写入Firestore

your_firestore
users
random_doc_id
train_text: "the passed in string"

编辑

根据一些新信息,OP希望从三个文本字段中提取文本,并将它们全部写入一个文档。

因此,如此更改按钮操作——它所做的只是调用我们的saveText函数,并且不传递任何数据。

@IBAction func saveButton(_ sender: UIButton) {
self.saveText()
}

然后是saveText函数

func saveText() {
let trainText = self.trainField.text!
let locationText = self.locationField.text!
let engineText = self.engineField.text!
let db = Firestore.firestore()
let dict = ["train_text": trainText,
"location_text": locationText,
"engine_text": engineText]
db.collection("users").addDocument(data: dict)
}

由此产生的Firestore看起来像这个

your_firestore
users
random_doc_id
train_text: "text from the train field"
location_text: "text from the location field"
engine_text: "text from the engine field"

这很容易实现,您需要做的是声明一个函数,该函数在输入数据后保存数据。

您无法保存trainField的原因是,当ViewController调用viewDidLoad时,按钮尚未按下,因此您无法从trainTextField获取文本。

要解决此问题,您可以执行以下操作:

fileprivate func saveTrainWithData(text: String) {
let dictData = ["train": text] as [String:Any]
// save data to FireStore here using `dictData`
let db = Firestore.firestore()
db.collection("users").addDocument(data: dictData)
}

现在要启动这个功能,只需在@IBAction内部调用它,如下所示

@IBAction func saveButton(_ sender: UIButton) {
var train: String = trainField.text!
saveTrainWithData(text: train)
}

最新更新