gpt4 book ai didi

swift - 如何将变量从 SecondViewController 传递到 TableViewController 中的 loadData() 函数?

转载 作者:行者123 更新时间:2023-11-30 11:10:23 25 4
gpt4 key购买 nike

这是我的第一个 Swift/Firestore 练习应用程序,我正在尝试访问“AddEventViewController”文件中要在“EventTableViewController”文件中使用的变量(eventLocation、eventDate)。

但是我似乎无法弄清楚缺少什么或者我做错了。

非常感谢那些更有经验的人的帮助。非常感谢!

This is my Storyboard setup

EventTableViewController.swift

import UIKit
import FirebaseFirestore

class EventsTableViewController: UITableViewController {

var eventsArray = [Event]()

override func viewDidLoad() {
super.viewDidLoad()
loadData()
}

func loadData() {
// How to pass variables from 'AddEventViewController' and use it inside this function??

Firestore.firestore().collection("Locations").document(??).collection("Dates").document(??).collection("Events").getDocuments() { (querySnapshot, error) in
if let error = error {
print("Error getting documents: \(error)")
} else {
self.eventsArray = querySnapshot!.documents.compactMap({Event(dictionary: $0.data())})
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return eventsArray.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "eventCell", for: indexPath)

let event = eventsArray[indexPath.row]

// Configure the cell...
cell.textLabel?.text = "\(event.programType)"
cell.detailTextLabel?.text = "\(event.eventLocation) \(event.eventDate)"

return cell
}

AddEventViewController.swift

import UIKit
import FirebaseFirestore

class AddEventViewController: UIViewController {

@IBOutlet weak var eventLocation: UITextField!
@IBOutlet weak var eventDate: UITextField!
@IBOutlet weak var programType: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func saveEventButtonTapped(_ sender: UIBarButtonItem) {
// Check if textfields are not empty
guard let EventLocation = eventLocation.text, !EventLocation.isEmpty else { return }
guard let EventDate = eventDate.text, !EventDate.isEmpty else { return }
guard let Program = programType.text, !Program.isEmpty else {return}

**// need to find a way to pass variables i.e. eventLocation and eventDate to 'EventsTableViewController'**

// Save profile details of person to Firestore as data fields
let eventDetail: [String: Any] = ["Event Location": EventLocation, "Event Date": EventDate, "Program": Program]

// Write data to Firestore
Firestore.firestore().collection("Locations").document(EventLocation).collection("Dates").document(EventDate).collection("Events").document(Program).setData(eventDetail)
{ error in
if let error = error {
print("ERROR: Event not saved to database. Please try again! \(error)")
} else {
print("Event has been saved to the database!")
}
self.dismiss(animated: true, completion: nil)
}
}

Event.swift

struct Event {
var programType: String
var eventLocation: String
var eventDate: String

var dictionary: [String: Any] {
return [
"programType": programType,
"eventLocation" : eventLocation,
"eventDate" : eventDate
]
}
}

extension Event : DocumentSerializable {
init?(dictionary: [String: Any]) {
guard let programType = dictionary["Program"] as? String,
let eventLocation = dictionary["Event Location"] as? String,
let eventDate = dictionary["Event Date"] as? String else { return nil}

self.init(programType: programType, eventLocation: eventLocation, eventDate: eventDate)
}
}

最佳答案

有一种方法可以做到这一点,您可以将 loadData() 添加到 viewWillAppear 方法中,如下所示:

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

loadData()
}

并将其从viewDidLoad中删除,因为viewDidLoad在 View 加载时只会调用一次。但是 viewWillAppear 每次访问 View 时都会调用。因此,每次您返回到上一个 View 时,它都会从服务器获取新数据。

关于swift - 如何将变量从 SecondViewController 传递到 TableViewController 中的 loadData() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52251047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com