swift firebase如何在不删除前一个单词的情况下向列表中添加新词

swift firebase如何在不删除前一个单词的情况下向列表中添加新词,swift,firebase,Swift,Firebase,目前,该应用程序有一个文本字段,当您按键盘上的回车键时,它会在屏幕上显示实时数据,但会删除前面的问题。我的问题是,如何才能不删除上一个问题,而只将这个新问题添加到列表中。。非常感谢你 import UIKit import FirebaseFirestore class ViewController: UIViewController, UITextFieldDelegate { let database = Firestore.firestore() pr

目前,该应用程序有一个文本字段,当您按键盘上的回车键时,它会在屏幕上显示实时数据,但会删除前面的问题。我的问题是,如何才能不删除上一个问题,而只将这个新问题添加到列表中。。非常感谢你

import UIKit
import FirebaseFirestore

class ViewController: UIViewController, UITextFieldDelegate {
    
    let database = Firestore.firestore()
    
    private let label: UILabel = {
        let label = UILabel()
        label.textAlignment = .center
        label.numberOfLines = 0
        return label
        
    }()
    
    private let field: UITextField = {
        let field = UITextField()
        field.placeholder = "enter text.."
        field.layer.borderWidth = 1
        field.layer.borderColor = UIColor.black.cgColor
        return field
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(label)
        view.addSubview(field)
        field.delegate = self

        let docRef = database.document("ios/ex")
        docRef.addSnapshotListener {[weak self] snapshot, error in
            guard let data = snapshot?.data(), error == nil else {
                return
            }
            
            guard let text = data["text"] as? String else {
                return
            }
            
            DispatchQueue.main.async {
                self?.label.text = text
            }
        }
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        field.frame = CGRect(x: 1, y: view.safeAreaInsets.top+10, width: view.frame.size.width-20, height: 50)
        label.frame = CGRect(x: 1, y: view.safeAreaInsets.top+10+60, width: view.frame.size.width-20, height: 100)
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if let text = textField.text, !text.isEmpty {
            savedData(text: text)
        }
        return true
    }
    
    func savedData(text: String){
        let docRef = database.document("ios/ex")
        docRef.setData(["text": text])
    }
    
}

在我看来,您试图做的是在文本字段中返回一些字符串,当Firestore侦听器看到数据中的更改时,这些字符串将显示在UILabel上。但问题是,您以前的数据没有出现。这是因为该功能:

func savedData(text: String){
    let docRef = database.document("ios/ex")
    docRef.setData(["text": text])
}
“docRef.setData()”的作用是用您正在设置的新数据替换现有数据。这就是您丢失以前数据的原因

如果要将文本附加到标签上显示的上一个问题,可能需要保存该标签字符串并附加文本,然后更新数据:

func savedData(text: String){
    let previousString = self.label.text!
    let newString = previousString + text
    let docRef = database.document("ios/ex")
    docRef.updateData(["text": newString])
}

什么名单?看起来你没有任何东西可以保存列表。标签用于单个文本字段。与文本字段相同。您可能需要某种类型的列表组件,例如用于显示多行文本的UITableView或UITextView。您还可以创建一个包含UILabel的可重用组件,并在遇到新问题时将其添加到视图中。