NEW: Get your ticket for Hacking with Swift Live 2019! >>

< Previous: Interpolacja ciągu znaków   Next: Dictionaries (Słowniki) >

Tablice

Tablice pozwalają na grupowanie wielu wartości w jeden zbiór, i dostęp do nich poprzez ich pozycję w tym zbiorze. Swift używa inferencji do ustalenia typów danych znajdujących się w tablicy:

var evenNumbers = [2, 4, 6, 8]
var songs = ["Shake it Off", "You Belong with Me", "Back to December"]

Jak widzisz, w Swifcie używa się nawiasów kwadratowych to oznaczenia początku i końca tablicy, a każdy jej element oddziela się przecinkiem.

Jeśli chodzi o odczyt danych z tablicy, to jest mała pułapka: Swift zaczyna liczyć od 0. To znaczy, że pierwszy element oznaczany jest jako 0, drugi jako 1, a trzeci jako 2, i tak dalej. Spróbuj wpisać do playground:

var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
songs[0]
songs[1]
songs[2]

To wypisze "Shake it Off", "You Belong with Me", i "Back to December" w zakładce wyników.

Pozycja elementu tablicy nazywana jest indeksem, a odczyt danej wartości z tablicy odbywa się poprzez podanie indeksu. Jednakże musisz być ostrożny: nasz tablica ma 3 elementy, co oznacza, że indeksy, których możesz użyć to 0, 1 i 2, ale jeśli spróbujesz odczytać element z indeksem 3 - songs[3], playground przestaną działać. W przypadku prawdziwej aplikacji taka sytuacja zakończy się crashem.

Jeśli stworzysz tablicę podając 3 stringi, Swift domyśli się, że tablica ta składa się z elementów typu String. Możesz sprawdzić to używając specjalnej komendy w playground, który wypisze typ danych dowolnej zmiennej:

var songs = ["Shake it Off", "You Belong with Me", "Back to December"]
type(of: songs)

Taka komenda wypisze Array<String>.Type w zakładce wyników, co pokazuje, że Swift uznał zmienną songs jako tablica stringów.

Załóżmy, że zrobisz błąd, i przypadkowo wstawisz liczbę na koniec tablicy. Wypróbuj to, i zobacz co zostanie wyświetlone w zakładce wyników:

var songs = ["Shake it Off", "You Belong with Me", "Back to December", 3]
type(of: songs)

Tym razem zobaczysz błąd. Nie oznacza on, że Swift nie radzi sobie z mieszanymi zbiorami danych - pokażę Ci to za chwilę! - zamiast tego Swift stara się być pomocny. Błąd, który zobaczysz brzmi "heterogenous collection literal could only be inferred to '[Any]'; add explicit type annotation if this is intentional." albo po ludzku "wygląda na to, że tablica przechowuje różne typy danych - jeśli miałeś to na myśli, doprecyzuj to".

Bezpieczeństwo typów jest ważne, i mimo że, Swift radzi sobie z tworzeniem kolekcji z różnymi typami danych, to w tym przypadku był to przypadek. Na szczęście, jak powiedziałem, możesz użyć adnotacji typu do doprecyzowania jakie typy danych ma zawierać tablica. Aby wyszczególnić typ kolecji, zapisz typ danych w nawiasach kwadratowych:

var songs: [String] = ["Shake it Off", "You Belong with Me", "Back to December", 3]

Teraz powiedzieliśmy Swiftowi, że chcemy przetrzymywać tylko stringi w tablicy. Taka deklaracja nie pozwoli uruchomić programu, bo 3 nie jest typu String.

Jeśli rzeczywiście chciałbyś, żeby tablica zawierała różne typy, użyj specjalnego typu danych Any:

var songs: [Any] = ["Shake it Off", "You Belong with Me", "Back to December", 3]

Tworzenie tablic

Jeśli tworzysz tablicę używając składni pokazanej powyżej, Swift utworzy tablicę i wypełni ją określonymi wartościami. Nie jest to takie proste, jeśli chcesz stworzyć tablice, i wypełnić ją później - taka składnia nie zadziała:

var songs: [String]
songs[0] = "Shake it Off"

Powodem na pierwszy rzut oka wydaje się być nieco pedantyczny, ale ma zasadnicze implikacje wydajnościowe, więc obawiam się, że musisz do tego przywyknąć. Krótko mówiąc, napisanie var songs: [String] powie Swiftowi, że zmienna songs będzie tablicą stringów, ale nie tworzy tej tablicy. Instrukcja ta nie zaalokuje pamięci RAM, ani nie zrobi nic, żeby utworzyć tablicę. To tylko mówi, że kiedyś w tym miejscu pojawi się kolekcja trzymająca dane typu String.

Jest kilka sposobów, żeby wyrazić to właściwie, a ten prawdopodobnie będzie najbardziej sensowny w tym momencie:

var songs: [String] = []

Taki zapis używa adnotacji typu do określenia, że tworzymy tablicę stringów, i przypisujemy do niej pusty zbiór - to właśnie oznacza zapis []

Częstym zapisem jest również:

var songs = [String]()

To oznacza dokładnie to samo: użycie () mówi Swiftowi, że chcemy od razu utworzyć instancję tablicy. Taki zapis jest o 2 znaki krótszy, więc nie powinno być to niespodzianką, że właśnie taki sposób jest częściej spotykany u programistów!

Operatory tablic

Możesz wykorzystać ograniczoną ilość operatorów podczas operacji na tablicach. Na przykład możesz połączyć dwie talice, używając operatora +:

var songs = ["Shake it Off", "You Belong with Me", "Love Story"]
var songs2 = ["Today was a Fairytale", "Welcome to New York", "Fifteen"]
var both = songs + songs2

Aby dodać kolejną wartość do zbioru, użyj operator +=:

both += ["Everything has Changed"]

HACKING WITH SWIFT LIVE This July is a new two-day event where you'll be inspired by great speakers on day one then learn all the amazing new features from WWDC on day two – click here for more information and tickets.

< Previous: Interpolacja ciągu znaków   Next: Dictionaries (Słowniki) >
MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let me know!

Click here to visit the Hacking with Swift store >>