Skip to content

Swift – Podstawy

Słowem wstępu

Spis treści wpisu

  1. Stałe oraz zmienne
  2. Wyświetlanie danych
  3. Pobieranie danych z klawiatury
  4. Aliasy typów
  5. Krotki
  6. Typy opcjonalne

Dlaczego Swift?

Uważam, że każdy programista, który tworzy aplikacje mobilne nawet pomimo bardzo dobrej znajomości jednej platformy – w której się specjalizuje – powinien przynajmniej znać podstawy pozostałych dostępnych (a przynajmniej tych, które opłaca się znać – wybacz WP). Docelowo chciałbym nauczyć się tworzyć aplikacje na iOS o jakości porównywalnej do tej, którą jestem w stanie zagwarantować tworząc natywne aplikacje Androida. Żeby móc o tym w ogóle myśleć, muszę w pierwszej kolejności poznać jeden z języków dedykowanych dla ekosystemu Apple: Objective-C oraz Swift. Wybór padł aktualnie na tą drugą pozycję.

Czym jest Swift?

Cytując wikipedię:

Swift – język programowania komputerów zaproponowany przez Apple Inc. podczas Worldwide Developers Conference 2 czerwca 2014. Język ma służyć programowaniu maszyn pracujących pod kontrolą systemów operacyjnych macOS i iOS i ma być następcą Objective-C. Do kompilowania programów będą wykorzystywane narzędzia z rodziny LLVM.

Język pozwala na tworzenie domknięć, iteratorów, interfejsów, programowanie uogólnione, korzystanie z krotek jako struktur danych oraz wyników działania funkcji, oraz umożliwia wywoływanie funkcji wyższego rzędu(takich jak mapreduce).

Język pozwala na odróżnienie danych, do których programista odwołuje się przez referencję, w postaci typowych instancji klas, oraz danych, do których programista odwołuje się przez wartość, przechowywanych w postaci rekordów (ang. struct), które jednak w odróżnieniu od języka programowania C mogą mieć swoje metody i dzięki temu można opisać ich zachowanie.

Swift na moim blogu

Planuję stworzyć serię wpisów pokrywających praktycznie wszystkie kwestie związane ze Swiftem. Po przerobieniu całego języka chciałbym, aby wpisy w znacznej większości dotyczyły tworzenia aplikacji dla obu platform, które jednocześnie będą na tyle dobre, aby móc wstawić je do portfolio. Pomiędzy kolejnymi postami (rzadziej lub częściej) pojawiać będzie się również reszta serii o SQL-u.

Stałe oraz zmienne

Zmienne i stałe są dokładnie tym samym co znamy z takich języków jak np. Java. Stałe definiujemy za pomocą słowa kluczowego var oraz let. Różni się jedynie zapis, dzięki któremu określamy typ jakiejś zmiennej:

// Zwykłe stworzenie zmiennych
var dynamicNumber = 10
let constantNumber = 15

// Stworzenie zmiennych ze zdefiniowaniem typu
var dynamicNumber: Int = 10
let constantNumber: Double = 15.5

Wyświetlanie danych

Chcąc wyświetlić jakieś dane możemy skorzystać z metody print(_:separator:terminator) . Chcąc więc napisać klasycznego Hello world’a:

// Klasyczne wyświetlenie zwykłego stringa
print("Hello, world!")

// Klasyczne wyświetlenie zwykłego stringa bez znaku nowej linii
print("Hello, world!", terminator: "")

// Wykorzystanie interpolacji oferowanej przez Swift'a
let myName = "Luke"
let myAge = 22
print("Hello, my name is \(myName). I'm \(myAge) years old.")

Pobieranie danych z klawiatury

Jest bardzo proste. Załóżmy, że chcemy poprosić użytkownika o podanie swojego imienia:

print("Proszę podać swój wiek: ", terminator: "")
var userAge = readLine()

 Aliasy typów

Do lektury na temat samych typów odsyłam do oficjanej dokumentacji: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html. Warto natomiast pokazać coś takiego jak aliasy typów. Możemy dzięki nim zdefiniować alternatywną drogę do wskazywania jakiegoś konkretnego typu. Przykładowo:

// Bez aliasu
var myValue = UInt64.max / 2

// Z alisaem
typealias MyAlias = UInt64
var myValue = MyAlias.max / 2

 Krotki (ang. tuples)

Dzięki nim możemy zawrzeć pewien zestaw danych w jednej zmiennej bez konieczności tworzenia dodatkowych struktur czy też klas. Przykładowo:

// Definicja
let http404Error = (404, "Not Found")

// Wykorzystanie
let (statusCode, statusMessage) = http404Error
print("statusCode = \(statusCode)")
print("statusMessage = \(statusMessage)")

// Pominięcie pewnych wartości krotki z pomocą znaku podłogi
let (onlyStatus, _) = http404Error
print("onlyStatus = \(onlyStatus)")

// Pobranie określonych wartości z krotki za pomocą indeksu
print("statusCode = \(http404Error.0)")
print("statusMessage = \(http404Error.1)")

// Pobranie określonych wartości z krotki za pomocą nazwy
print("statusCode = \(http404Error.statusCode)")
print("statusMessage = \(http404Error.statusMessage)")

Typy opcjonalne

Jest to coś z czym spotykam się pierwszy raz właśnie w Swifcie. Jako opcjonalne możemy oznaczyć wartości, które.. mogą nie mieć wartości (innymi słowy będące wartość nil). Zmienna opcjonalna będzie oferować nam dwie możliwości: wystąpienie wartości oraz jej nie wystąpienie. Możemy w łatwy sposób obsłużyć każdy z tych przypadków. Może to wyglądać następująco:

// Zmienna opcjonalna z wartośćią
var name: String? = "Luke"
print("Hello, \(name ?? "user")!") // -> "Hello, Luke!"

// Zmienna opcjonalna z wartością nil
name = nil
print("Hello, \(name ?? "user")!") // -> "Hello, user!"

Jeżeli zmienna jest opcjonalna, to środowisko będzie na nas krzyczeć, że powinniśmy obsłużyć przypadek, w którym do zmiennej nie została przypisana żadna konkretna wartość. Możemy również wykorzystać mechanizm, który nazywa się wiązaniem typów opcjonalnych. Polega to na tym, że możemy określić kiedy typ opcjonalny posiada wartość i jeśli tak jest, to uzyskać dodatkowy dostęp do niego tworząc tymczasową stałą lub zmienną:

var decimalNumber: Decimal? = 123.0

if let integerNumber = Int(decimalNumber) {
    print("\(integerNumber) - to jest teraz wartość typu Int")
} else {
    print("\(decimalNumber) - nie udało się wykonać konwersji")
}

W momencie gdy chcemy przypisać zmienną opcjonalną do innej zmiennej, musimy użyć wykrzyknika:

// Konieczne użycie wykrzyknika
let possibleName: String? = "Luke"
let forcedName: String = possibleString!

// Brak konieczności użycia wykrzyknika
let possibleName: String = "Luke"
let forcedName: String = possibleString

Wpis ten jest pierwszym wpisem dużej serii.

Źródła:

Facebooktwitterredditlinkedinmail
Published inSwift