#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:
- Tablice (Array),
- Słowniki (Dictionary)
- 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.