#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.

Połączenie dwóch widoków

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.

Segue 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.

Dodaj komentarz