Swift switch, czyli zabawa warunkami

Swift switch, czyli zabawa warunkami
Chciałbym, abyś zaprzyjaźnił się z instrukcją warunkową switch w Swifcie, opierając się na metodzie gumowej kaczki. Zakładam, że masz już pojęcie jak działa instrukcja switch, w związku z tym pokażę co nowego w Swifcie.

Najczęściej używany przykład

Tutaj pokażę kawałek kodu, który opiszę w kolejnym paragrafie.

let string = "Hello, playground" //1
let value = false
var endString: String //2
 
switch string {
case "Hello, playground" where value: //3
endString = "case one with value"
case "a", "b", "c": //4
endString = "case with 3 values"
case "Goodbye playgrand": //5
endString = "Goodbye"
case _ where !value: //6
endString = "Yo!"
default: //7
endString = "default"
}
  1. Tutaj tworzę stałą string.
  2. Zmienna string, którą będziemy nadpisywać w switch’u.
  3. Wartość stringu się zgadza, ale dodałem “where” które również sprawdza wartość podaną dalej.
  4. Można wymienić po przecinku kilka wartości i jeśli którakolwiek się zgadza switch wejdzie w dany case.
  5. Zła wartość podana, więc case również zostanie pominięty.
  6. Zamiast podania wartości można dać kreskę dolną która oznacza, że niezależnie od tej wartości powinien wejść w dany case.
  7. Słowo: “default” oznacza, że wejdzie jeśli wszystkie inne wartości się nie zgadzają.

Optionale

let text = "Text" as AnyObject? //1
switch text {
case let text? where text is Int: //2
print(text as! Int)
case let text? where text is String: //3
print(text as! String)
default: ()
}
  1. Kolejna zmienna z wartością string, ale zadeklarowaną jako opcjonalny obiekt Any.
  2. Sprawdzanie czy text jest nilem i dalej za “where” sprawdzenie czy dany obiekt jest Int’em.
  3. Sprawdzanie czy text jest nilem i dalej za “where” sprawdzenie czy dany obiekt jest String’iem.

Inty

let a = 1
let b = 2
var c = 0

switch (a, b) { //1
case (1, 2), (2, 3): //2
c = 12
fallthrough //3

case (2,_): //4
c += 1
case (let aValue, 2): //5
print("a = \(aValue)")
case (let eitherValue, 2), (2, let eitherValue): //6
print("either value: \(eitherValue)")
case (0...3, 0...100): //7
c += 5
fallthrough
default:
c = 17
}

  1. W przypadku takiego zapisu switch będzie sprawdzał obie stałe.
  2. W ten sposób można obsłużyć kilka przypadków na raz w jednym warunku.
  3. Słowo “fallthrough” oznacza przejście do kolejnego warunku czyli, jeśli (a, b) == (1, 2) przejdzie do kolejnego spełnionego warunku.
  4. W takim przypadku switch będzie sprawdzał tylko pierwszą wartość i całkowicie pominie drugą.
  5. Switch będzie sprawdzał tylko drugą wartość a z pierwszej stworzy stałą, w tym przypadku o nazwie “aValue”.
  6. Tutaj chciałem pokazać, że wartości można tworzyć z różnych parametrów, czyli w pierwszym przypadku z pierwszej wartości a w drugim z drugiej wartości.
  7. Ten przypadek pokazuje użycie przedziałów liczbowych, tutaj switch sprawdzi czy pierwsza wartość będzie w przedziale od 0 do 3 a druga od 0 do 100.

Enumy

enum Cases { //1
case noParameters
case oneParameter(text: String)
case anotherOneParameter(firstText: String)
case twoParameters(text: String, number: Int)
}
let thisCase: Cases = .twoParameters(text: "Text", number: 10) //2
switch thisCase {
case .oneParameter(_): //4
break
case .anotherOneParameter(let text): //5
print("Text: \(text)")
case let .twoParameters(text, number): //6
print("Text: \(text)")
print("Number: \(number)")
default: ()
}
  1. Deklaracja enum’u z 3 wartościami, pierwsza bez parametrów, druga i trzecia z jednym parametrem i czwarta z dwoma parametrami
  2. Stworzenie stałej z dwoma parametrami
  3. Sprawdzanie czy stała jest równa .noParameters
  4. Sprawdzenie czy stała jest równa .oneParameter i pominięcie wartości
  5. Sprawdzenie czy stała jest równa .anotherOneParameter dająca możliwość dostępu do parametrów
  6. To samo co w punkcie 5 tylko słowo “let” jest teraz przed nazwą dzięki czemu nie trzeba pisać przed każdym parametrem

Kod wykorzystany w tym artykule znajduje się na naszym GitHubie.

Spis treści

Dowiedz się więcej

Dynamiczna lokalizacja powiadomień na iOS-a, czyli jak wysyłać wiadomości w różnych językach

Jak ustanowić łącznik pomiędzy użytkownikiem, dostawcą a aplikacją? Wykorzystaj powiadomienia systemowe. Dzięki nim użytkownik szybko otrzymuje najnowsze informacje. To rozwiązanie łatwo zastosujesz w aplikacjach zorientowanych na jeden rynek. Problemy zaczynają się, gdy treści muszą być tworzone w różnych językach. Wtedy pomocą służy dynamiczna lokalizacja zdalnych powiadomień bez wykorzystania własnego serwera.
Przeczytaj

Jak wykorzystać feature flags, żeby zyskać większą kontrolę nad aplikacją?

Chyba każdy, kto zajmuje się budową oprogramowania może opowiedzieć kilka historii o niedziałających funkcjach. Starannie tworzymy aplikacje z niewielkich elementów, stosujemy zaawansowane wzorce architektury, ale i tak czasem coś odmawia posłuszeństwa. Skutkuje to błędami, a nawet awarią systemu. Wtedy sytuację może uratować feature toggling. Sprawdź, jak wdrożyć feature flags i zwiększ stabilność swojej aplikacji.
Przeczytaj

WebSockets na iOS-a – komunikacja w czasie rzeczywistym, która nie spowalnia aplikacji

Kiedy chcesz pobrać dane do aplikacji, zwykle pewnie wykorzystujesz interfejs API RESTful. Wystarczy zapytać serwer o paczkę danych i gotowe. To dobra metoda, jeśli aplikacja nie potrzebuje stałego dostępu do nowych informacji. A co jeśli treści muszą się odświeżać w czasie rzeczywistym? Wtedy opóźnienie może np. uniemożliwiać dokonanie zakupu albo postawienie zakładu sportowego. Na szczęście z pomocą przychodzą WebSockets na iOS-a. Sprawdź, jak je zaimplementować i dlaczego warto to zrobić.
Przeczytaj

Wycena projektu

Sprawdź, jak wykorzystujemy naszą wiedzę w praktyce i stwórz z nami swój projekt.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2017

Nominacja w kategorii
M-COMMERCE

17

opinii klientów

Clutch logo
Logo Legalni bukmacherzy

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

60+

zrealizowanych projektów