#11 – Przekazywanie danych pomiędzy controller view w SWIFT
W tym wpisie zajmiemy się dosyć powszechnym problemem jakim jest przekazanie danych z jednego widoku do drugiego, np. w momencie wciśnięcia elementu na liście table view. Aby tego dokonać w języku SWIFT mamy taki mechanizm jak segue, który poprzez odpowiednie nazwanie i oznaczenie połączenia w storyboard potrafi przesłać odpowiednie dane do widoku. W przypadku projektowanej aplikacji będziemy chcieli aby po wybraniu odpowiedniego wiersza w table view, otworzył się nowy widok w którym zostanie przekazany numer identyfikacyjny wybranej marki.
W tym celu wchodzimy do storyboard, następnie klikamy na wybrany wiersz (u nas nazywa się cell) i trzymają ctrl przeciągamy do nowego widoku. Gdy wszystko wykonamy poprawnie całość powinna wyglądać tak jak na zdjęciu poniżej.
Następnie bardzo ważna kwestią jest ustawienie nazwy identyfikującej to przejście segue. W tym celu klikamy na kółko w połączeniu obu widoków i w opcjach nadajemy identyfikator.
Teraz przechodzimy do naszego kodu i wstawiamy kod dotyczący segue dla naszego przejścia. W nowym widoku zmienną która chcemy przesłać zapisujemy w modelId i będzie ona typu String. Następnie zostanie wykorzystana do przesłania zapytania POST w naszym API. W tym celu w SWIFT 3 wykorzystamy funkcję prepare dla naszego segue.
override func prepare(for segue: UIStoryboardSegue, sender: Any?){ if (segue.identifier == "modelsSegue") { let viewController = segue.destination as! ModelsViewController let indexPath = tableView.indexPathForSelectedRow! let currentCell = tableView.cellForRow(at: indexPath)! as! BrandCellTableViewCell viewController.modelId = currentCell.id } }
Jak widać na samym początku sprawdzamy identyfikator jaki nadaliśmy naszemu połączeniu (na drugim zdjęciu). Następnie tworzymy zmienną w której zapisany jest kontroler do drugiego widoku. W stałej indexPath trzymamy aktualny numer wciśniętego wiersza w table view, po to aby w stałej currentCell ustawić dostęp do tego obiektu.
W ostatnim kroku mamy pełny dostęp do drugiego widoku i w tym przypadku ustawiamy zmienną modelId, którą musimy zadeklarować w drugim widoku.
var modelId: String = ""
Po wszystkich zmianach zapisujemy i sprawdzamy działanie. Jeżeli wszystko jest ok to możemy przesyłać kolejne zmienne lub całe obiekty, jest to bardzo intuicyjny sposób na przesyłanie informacji pomiędzy widokami.