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.

Dowiedz się więcej

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2023

Wygrana w kategorii
MCOMMERCE ROZWÓJ

23

opinie klientów

Clutch logo