0Pricing
Swift Academy · Lekcja

Kolekcje

Kolekcje

Kolekcje to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 1. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 1 lekcji w sumie.

Wprowadzenie

Dzień dobry,

W tej lekcji poznamy typy kolekcji w Swift, które są jednym z najważniejszych tematów.

Zacznijmy więc.

W Swift istnieją 3 typy kolekcji.

Array → Kolekcje uporządkowane sekwencyjnie.

Set → Kolekcje nieuporządkowane i przechowujące unikatowe elementy.

Dictionary → Kolekcje nieuporządkowane, przechowujące pary klucz-wartość.

Mutowalne — niemutowalne

To, czy nasze typy kolekcji są niemutowalne czy mutowalne, zależy od sposobu ich zdefiniowania.

Jeśli zdefiniujemy kolekcję za pomocą instrukcji let, będzie niemutowalna, natomiast po zdefiniowaniu za pomocą var będzie mutowalna.

Jeśli zdefiniowana wartość nie będzie się później zmieniać, użycie let pozwoli kompilatorowi działać wydajniej dzięki większym możliwościom optymalizacji.

Array

Array

Array to typ kolekcji służący do przechowywania danych w określonej kolejności. Od wersji Swift 3 wszystkie elementy tablicy nie muszą być tego samego typu.

Składnię prostej definicji Array przedstawiono w poniższym przykładzie.

// Let's create an empty array.
var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// Prints "someInts is of type [Int] with 0 items."

Tworzenie tablicy z wartością domyślną

Tworzenie tablicy z wartością domyślną

W niektórych przypadkach możemy chcieć utworzyć tablicę z wartością domyślną i określonym rozmiarem. W tym celu należy przekazać dwa argumenty do konstruktora Array.

Argumenty te określają wartość domyślną oraz liczbę elementów, które będzie zawierać tablica.

var threeDoubles = Array(repeating: 0.0, count: 3)
print(threeDoubles)
// threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]

var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
print(anotherThreeDoubles)

var sixDoubles = threeDoubles + anotherThreeDoubles
print(sixDoubles)
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

Tworzenie Array za pomocą literału tablicowego

Tworzenie Array za pomocą literału tablicowego

W poprzednim przykładzie nauczyliśmy się tworzyć pusty Array. W niektórych przypadkach możemy jednak chcieć utworzyć Array za pomocą literału tablicowego.

Nauczmy się jego użycia na przykładzie.

/*
We have defined a variable named catList, 
and with the [String] statement we specified 
that its type is an Array containing String elements.
*/
var catList: [String] = ["Garfield", "Tom"]
print(catList)
/*
It will understand that the array is an Array containing
String statements, since we assign a value that 
defines the variable. (Swift type inference)
*/
var shoppingList = ["Eggs", "Milk"]
print(shoppingList)

Dostęp do wartości tablicy

Dostęp do wartości tablicy

Aby uzyskać dostęp do elementu sekwencji znajdującego się pod określonym indeksem, wystarczy wywołać go za pomocą następującej składni.

myArray [index]

Przyjrzyjmy się przykładowi.

// We have defined an array with 3 elements of type Int.
var numbers:[Int] = [1, 5, 21]

// Arrays start from Index 0. For example, in order to reach the value 5, which is the 2nd element, we need to access the 1st index.
var a = numbers[1]
print( "Value of numbers at index 1 is \(a)" )

Dodawanie nowych elementów do Array

Dodawanie nowych elementów do Array

Możemy dodać nowy element do Array. 

W poniższym przykładzie zdefiniowano Array o nazwie catList. Następnie za pomocą metody append dodano do tego Array nowy element. 

// The Array named catList was defined with 1 initial element.
var catList = ["Tom"]


/*
We are adding a new item with a Garfield 
value using the append method.
*/
catList.append("Garfield")
// Our array will now have 2 elements.


/*
With the + = operator, we can do the 
work that the append method does.
*/
catList += ["Sylvester"]

Dodawanie danych pod określonym indeksem tablicy

Dodawanie danych pod określonym indeksem tablicy

Wartość dodana za pomocą metody append w poprzednim przykładzie zostanie umieszczona na końcu tablicy. Czasami możemy jednak chcieć dodać ją pod określonym indeksem. W tym celu użyjemy metody insert.

Składnia będzie wyglądać następująco.

myArr.insert ("The data to add", at: index);

Przekonajmy się na przykładzie.

var catList = ["Tom"]

catList.insert("Garfield", at: 1)

print(catList)

Usuwanie konkretnego elementu z tablicy

Usuwanie konkretnego elementu z tablicy

Metoda remove służy do usuwania elementu znajdującego się pod określonym indeksem w tablicy.

var shoppingList = ["Apple", "Cherry", "Cheese"]

let shoppingListOne = shoppingList.remove(at: 0)
// the item that was at index 0 has just been removed
// the mapleSyrup constant is now equal to the removed "Maple Syrup" string

let shoppingListTwo = shoppingList.removeLast()
// the last item in the array has just been removed

print(shoppingListTwo)

Iterowanie po Array

Możemy iterować po tablicy za pomocą konstrukcji for-in.

Przyjrzyjmy się przykładowi.

var shoppingList = ["Banana", "Orange", "Milk"]

for item in shoppingList {
    print(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

for (index, value) in shoppingList.enumerated() {
    print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas

Zbiory

Zbiory

Służą do przechowywania razem kolekcji elementów tego samego typu, bez określonej kolejności.

Jak wskazuje nazwa, są to zbiory. W zbiorze nie mogą znajdować się dwa elementy o tej samej wartości.

Tworzenie pustego zbioru

Poniższy przykład pokazuje, jak utworzyć pusty zbiór.

var catSet = Set<Character>()

Tworzenie zbiorów za pomocą literału Array

Tworzenie zbiorów za pomocą literału Array

Literał Array może służyć do tworzenia zbioru. Należy pamiętać, że chociaż przypisana tu wartość wygląda jak tablica, typem zmiennej jest Set <String>.

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

Uwaga

Za pomocą literału Array nie można utworzyć zbioru bez określenia typu. Może to kolidować z Array. Dlatego musimy określić typ. 

Należy go używać co najmniej w następujący sposób.

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

Metody typu Set

Metody typu Set

Przyjrzyjmy się przykładowi.

var favoriteGenres = ["Funk"]

print("I have \(favoriteGenres.count) favorite music genres.")

if favoriteGenres.isEmpty {
    print("favoriteGenres is empty")
} else {
    print("I have particular music preferences.")
}

if favoriteGenres.contains("Funk") {
    print("Funk")
} 

Iterowanie po typie Set

Iterowanie po typie Set

Typ Set w języku Swift nie zachowuje kolejności. Podczas iterowania po wartości typu Set można jednak użyć metody sorted. Metoda ta sortuje elementy zbioru i zwraca je jako tablicę.

let favoriteGenres = ["Classical","Jazz", "Hip hop"]

for genre in favoriteGenres {
    print("\(genre)")
}
// Classical
// Jazz
// Hip hop

Dictionary

Dictionary

Dictionary to typ kolekcji, który przechowuje wartości jako pary klucz–wartość i nie zachowuje kolejności.

Każda wartość jest przechowywana wraz z unikatowym kluczem. Klucz ten stanowi identyfikator tej wartości w Dictionary. Dictionary nie zachowuje kolejności tak jak Array. Można myśleć o nim jak o słowniku w świecie rzeczywistym.

Dlatego identyfikator każdej wartości jest ważniejszy niż jej pozycja.

Typ Dictionary można zdefiniować za pomocą skróconej składni [Key: Value]. Skrócona składnia jest częściej używana.

var namesOfIntegers = [Int: String]()
// namesOfIntegers is an empty [Int: String] dictionary

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type [Int: String]

Metody dostępu do słownika

Za pomocą metody count możemy sprawdzić, ile elementów zawiera słownik.

Ponadto możemy sprawdzić, czy słownik jest pusty, za pomocą metody isEmpty.

Przeanalizujmy przykłady użycia tych metod.

var airports = ["LHR": "London", "IST": "Istanbul"]

print("The airports dictionary contains \(airports.count) items.")
// Prints "The airports dictionary contains 2 items."

if airports.isEmpty {
    print("The airports dictionary is empty.")
} else {
    print("The airports dictionary is not empty.")
}
// Prints "The airports dictionary is not empty."

airports["LHR"] = "London"
// the airports dictionary now contains 3 items

Subscript

Pobieranie wartości za pomocą subscriptu wygląda następująco. Zwracany wynik jest opcjonalny.

var airports = ["DUB":"Dublin"]

if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName).")
} else {
    print("That airport is not in the airports dictionary.")
}
// Prints "The name of the airport is Dublin Airport."



//Deletion
airports["APL"] = nil

if let removedValue = airports.removeValue(forKey: "DUB") {
    print("The removed airport's name is \(removedValue).")
} else {
    print("The airports dictionary does not contain a value for DUB.")
}
// Prints "The removed airport's name is Dublin Airport."

Aktualizowanie słownika

Oprócz użycia przedstawionego wyżej subscriptu istnieje też metoda aktualizowania słownika.

Ta metoda po zakończeniu aktualizacji zwraca starą wartość, czyli wartość sprzed aktualizacji.

var airports = ["DUB": "Dublin"]

if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    print("The old value for DUB was \(oldValue).")
}
// Prints "The old value for DUB was Dublin."

Przykład konwersji z Dictionary na Array

Poniżej przedstawiono przykład konwersji z Dictionary na Array.


let airports = ["IST":"Istanbul Airport", "DUB":"Dublin Airport"]

let airportCodes = [String](airports.keys)
print(airportCodes)

let airportNames = [String](airports.values)
print(airportNames)

Gratulacje

Gratulacje 🎉

W tej lekcji nauczyli się Państwo korzystać z kolekcji w Swift.

Do zobaczenia w następnej lekcji.

Kolekcje — ilustracja 22

Często zadawane pytania

Czy lekcja „Kolekcje” jest bezpłatna?

Tak — pełny tekst „Kolekcje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 1 lekcji w sumie.

Co nauczysz się w „Kolekcje”?

Kolekcje Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 1.

Ile czasu zajmuje lekcja „Kolekcje”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

← Powrót do Swift Academy