Ich kodiere eine App in Swift, die das Auffüllen einer Tabelle basierend auf der Iteration von Informationen aus Arrays beinhaltet, die nach einer Datenbankabfrage angehängt werden. Ich habe die Abfrage, das Anfügen und die tableView.reloadData()
alle in der viewDidLoad()
Methode. Es funktioniert gut. Ich habe auch fast genau den gleichen Code in eine Refresh-Funktion geschrieben, die mit einem Zug auf dem Bildschirm reagiert. Es funktioniert auch gut. Das Problem ist jedoch, dass es sehr beschäftigt ist. Es gibt viel Code geschrieben zweimal und ich frage mich, was der beste Weg ist, das zu beheben. Hier ist der relevante Code:Wie kann die Code-Redundanz in Swift reduziert werden?
im viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad(){
//run query, append arrays
self.tableView.reloadData()
}refreshControl = UIRefreshControl()
refreshControl!.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl!.addTarget(self, action: #selector(DisplayEventsTVC.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
}
Die Refresh-Funktion:
func refresh(sender: AnyObject){{
//exact same query and appending
}
self.tableView.reloadData()
self.refreshControl?.endRefreshing()
}
Die Abfrage und Anfügen ist sehr lang, so würde ich einen besseren Weg, wie zu handhaben, dass als einfach den Code aus der viewdidload() kopieren und in die Refresh-Funktion einfügen und ein .endRefreshing() hinzufügen. Was ist der beste/effizienteste Weg, dies zu tun?
Dies ist alles in einem Tableviewcontroller getan.
Warum also nicht die „Abfrage und anhängt "gerade aus in einem separaten func dass' viewDidLoad' und 'refresh' beide aufrufen? Es sieht so aus, als müsste diese Funktion auch einen Completion-Handler bereitstellen, damit Sie das Timing von 'endRefreshing' steuern können. Wenn "query and anhanging" in einem separaten Thread ausgeführt wird, benötigt 'viewDidLoad' ebenfalls' tableView.ReloadData() '. – Michael
@Michael, tut mir leid, ja. Die ViewDidLoad hat eine .ReloadData(), ich habe vergessen, es in die Frage zu stellen. Was ist der beste Weg, um den Completion-Handler für die Aktualisierung einzurichten ... nicht so gut mit diesem Zeug. –