#3 Kurs Swift – Tablice, słowniki, krotki

Dzisiaj zapoznamy się z bardziej złożonymi typami danych, które są wykorzystywane w programach.

Kolekcje (Collections)

Jest to konstrukcja która pozwala na grupowanie elementów. W Swift znajdziemy trzy typy kolekcji:

  1. Tablice (Array),
  2. Słowniki (Dictionary)
  3. Zbiory (Set)

Tablice (array)

Są to przydatnym tworem dlatego są bardzo często wykorzystywane w wielu programach. Aby utworzyć nową tablicę musimy postępować identycznie jak przy tworzeniu zmiennych/stałych, a wartości wpisujemy w nawiasach kwadratowych. Należy tylko pamiętać, że wartości tablicy muszą być jednakowego typu, inaczej otrzymamy błąd. Przykład zdefiniowania nowej tablicy:

let tablica = [9,8,7,6,5] // tablica jako stała
let tablica2 = [1,2,3,4,5] // tablica jako zmienna</pre>

var tablica3: Array <String> = ["Fiat", "Opel", "Ford"]

Każdy element tablicy ma przypisany unikalny indeks, dzięki któremu możemy się do niego odwołać. Indeksacja tablicy rozpoczyna się od zera, poniżej przykład odwołania się do elementów tablicy:

let nr = tablica[0] // zawiera 9
let nr2 = [4] // zawiera 5
var marka = tablica3[1] // będzie zawierała String (tekst) o nazwie Opel

Tablice w Swift są obiektami, a więc mamy dostęp do pewnych metod, które pozwalają na łatwiejszą pracę.

let tablica = [9,8,7,6,5]
tablica.first // pierwszy element tablicy (9)
tablica.last // osttani element tablicy (5)
tablica.count // ilość elementów w tablicy (5)
tablica.append(4) // dopisuje na końcu tablicy wartość w nawiasie , tablica będzie wyglądała [9,8,7,6,5,4]

Słownik (Dictionary)

Słownik w pewnym sensie jest podobny do tablic asocjacyjnych, jest to nieuporządkowany typ danych zawierający pary. Para jest to przypisanie konkretnego klucza do konkretnej wartości. W odróżnieniu od tablic do konkretnej wartości odwołujemy się poprzez podanie klucza.

var mojLicznik: Dictionary <String, Int> = ["jeden": 5, "dwa": 3, "sto": 3]
mojLicznik["stop"] //zwróci wartość 3
mojLicznik["jeden"] // zwróci wartość 5

Zbiór (Set)

Jest to zbiór unikatowych elementów jednego typu. Elementy nie posiadają przypisanych indeksów ani kluczy.

var pojazdy: Set <String> = ["Fiat", "Opel", "Ford"]
var czyPosiada = pojazdy.contains("Ford") // zmienna czyPosiada przyjmie wartość true, ponieważ "Ford" zawiera się w zbiorze pojazdy
var czyPosiada2 = pojazdy.contains("Audi") // zmienna czyPosiada2 przyjmie wartość false, ponieważ "Audi" nie zawiera się w zbiorze pojazdy

Jak widzicie jest tego trochę, ale są to dosyć proste zbiory zbiory danych, którymi można w bardzo łatwy sposób manipulować.

Krotki (Tuples)

W odróżnieniu od powyższych typów, krotki są strukturami danych z uporządkowanymi ciągiem wartościami o różnych typach danych. Jako przykład zrobimy krotkę zawierającą dane osoby w postaci imię, nazwisko i wiek.

var person: (firstName: String, lastName: String, age: Int)
person = (firstName: "Jan", lastName: "Nowak", age:18)

Podobnie jak w przypadku kolekcji, możemy odwoływać się do elementów krotki na różne sposoby. Możemy również zmieniać niektóre elementy już zdefiniowanej krotki.

var name = person.firstName // Zwróci Jan
var surname = person.lastName // Zwróci Nowak
var age = person.2 // Zwróci 18

person.surname = "Kowalski"
var surname = person.lastName // Teraz zwróci nam nazwisko Kowalski

Wszystkie powyższe typy danych mają swoje zastosowanie w praktyce. Warto poćwiczyć i spróbować zdefiniować własne przykłady. Aby utrwalić sobie wiedzę zajmiemy się budową prostej aplikacji, która będzie zawierała jedno pole tekstowe i przycisk (Button). Zadaniem aplikacji będzie konwersja podanej cyfry na tekst.

Przykład

Zaczniemy od utworzenia nowego projektu tak jak to pokazywałem w lekcji 1. Następnie dodajemy dwa elementy na nasz ViewController (TextField i Button) i wyśrodkowujemy je w pionie i poziomie.  Przy okazji możemy zmienić kolor tła, aby dodane elementy były lepiej widoczne.

Następnie uruchamiamy podzielony widok podglądu wizualnego i kodu naszego kontrolera (Assistans editor). Trzymając klawisz option przeciągamy na kod kontrolera pole tekstowe TextField i nadajemy mu jakąś nazwę.

Kolejno przeciągamy przycisk i ustawiamy takie parametr jak na zdjęciu poniżej.

Gdy już to wykonamy, możemy zająć się pisaniem kodu, który zostanie wykonany po naciśnięciu przycisku.

Najpierw zdefiniujemy tablicę o nazwie tablica, a następnie przypiszemy jej kilka elementów, w moim przypadku są to kolejne nazwy cyfr od zera do osiem.  Następnie w metodzie obsługującej zdarzenie kliknięcia przycisku, dodajemy kod do odebrania wartości z pola tekstowego.  Kolejno tworzymy stałą która będzie zawierała komunikat, wyświetlany na ekranie (alert). W komunikacie tym wyświetlamy wartość tablicy z konkretnego elementu.  Krótko mówiąc wartość jaką wpiszemy w polu tekstowym, będzie numerem indeksu naszej tablicy. Na końcu dodajemy obsługę przycisku OK i wyświetlamy komunikat. Cały kod powinien wyglądać tak jak poniżej.

class ViewController: UIViewController {

    @IBOutlet weak var fieldNumber: UITextField!
    
    var tablica: Array <String> = ["Zero", "Jeden", "Dwa", "Trzy", "Cztery", "Pięć", "Sześć", "Siedem", "Osiem"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func btnClick(sender: AnyObject) {
        var liczba:String = fieldNumber.text!
        var indeks:Int = Int(liczba)!
        
        let alertController = UIAlertController(title: "Komunikat", message: tablica[indeks], preferredStyle: UIAlertControllerStyle.Alert)
        
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default)
            {
                (result : UIAlertAction) -> Void in
        }
        alertController.addAction(okAction)
        self.presentViewController(alertController, animated: true, completion: nil)
        
        
    }

}

Przykład działania powyższego programu został zaprezentowany na zdjęciu poniżej dla cyfry 2.

UWAGA: Jeżeli podamy za dużą wartość w polu tekstowym np. 9 lub jakąś literę/znak, to nasz program zostanie zatrzymany i zwrócony zostanie błąd, ponieważ nie robimy walidacji danych które przychodzą z pola tekstowego.  W następnych lekcjach zajmiemy się dodaniem instrukcji warunkowych tak aby nasz program był bardziej przyjazny w użytkowaniu. Cały projekt można pobrać pod tym linkiem kurs3Tables.

Dodaj komentarz