Swift News: Co nowego uświadczymy w Swift 4?

Swift News: Co nowego uświadczymy w Swift 4?

Off-topic: Tym wpisem rozpoczynamy nowy cykl nazwany „Swift News”. Wszelkie nowości związane z językiem Swift będą podpisywane tym właśnie cyklem. Przejdźmy już do dzisiejszego tematu.

Niedługo będziemy świadkami kolejnej wersji Swift’a a mianowicie pojawi się przy nim cyfra 4 i w związku z tym wydarzeniem przyjrzymy się wspólnie jakich zmian i modernizacji wprowadza gigant z Cupertino.

Więc co nowego uświadczymy w Swift 4?

 

Wieloliniowe ciągi znaków (Multi-Line String Literals)

Dodanie nowych wierszy przy użyciu n i unikanie podwójnego cudzysłowu w ciągu znaków nie zawsze jest zadaniem przyjemnym.

Do tej pory w Swift 3 mogliśmy dodawać nowe wiersze przy użyciu /n. Należało jednak pamiętać o unikaniu podwójnego cudzysłowiu. Swift 4 wychodzi na przeciw oczekiwaniom developerów udostępniając nam taką oto możliwość:

let multiLineStringLiteral = ""
Nasza wieloliniowa wiadomość
zapisana za pomocą podwójnego cudzysłowiu.
Nie potrzeba stawiać "/n" na końcu zdania.""
print(multiLineStringLiteral)

Rezultat?

"Nasza wieloliniowa wiadomość
zapisana za pomocą podwójnego cudzysłowiu.
Nie potrzeba stawiać "/n" na końcu zdania."

String jako kolekcja

Poniekąd mamy tu powrót do korzeni ponieważ tak jak to było w pierwszej wersji Swift’a ciągi znaków będą traktowane jako kolekcja. Nie jest wymagane pisanie strin.characters.xxx aby manipulować ciągami.

let message = "Wiadomość!"
message.count // nie ma potrzeby pisania message.characters.count
for character in message { // nie ma potrzeby pisania message.characters
print(character)
}

I oto wyniki:

8
W
i
a
d
o
m
o
ś
ć
!

Mutable Collection.swapAt

Niestety chyba nie da się sensownie tego przetłumaczyć na nasz ojczysty język więc użyłem oryginału. Jest to bardzo minimalna zmiana ale warta odnotowania. Zmiana miejsc w szykach (Arrays)

var pets = ["pies", "kot", "sowa", "papuga"]
names.swapAt(2,3)

Rezultat będzie następujący:

["pies", "kot", "papuga", "sowa"]

One-Sided Ranges

Aby poprawić czytelność naszego kodu, standardowa biblioteka może indeksować początek i koniec.

// Collection Subscript
var heroes = ["Iron Man", "Captain America", "Groot", "Flash", "Batman", "Superman", "Green Lantern", "Robin"]
let dcUniverse = heroes[4...] // Wcześniejszy zapis: heroes[4..<planets.endIndex]
let marvelUniverse = planets[..<4]// Wcześniejszy zapis: heroes[heroes.startIndex..<4]

Smart KeyPaths

Ostatnia prezentowana przeze mnie nowość jest moją ulubioną.

Pozwala ona nam na uzyskanie dowolnej nazwy właściwości.

Zobaczmy jak to wygląda.

Najpierw jednak potrzebne informacje.

struct Address {

 var street:String
 var zip:String
 var city:String
 var state:String
}
stuct Person {
 var name: String
 var addresses: [Address]
 
 var primaryAddress: Address {
 return addresses.first!
 }
}

Następnie

let address1 = Address(street: “Apple Bay Street”, zip: “94608”, city: “Emeryville”, state: “California”)
let address2 = Address(street: “27th Way”, zip: “85042”, city: “Phoenix”, state: “Arizona”)
let person = Person(name: “Steve Jobs”, addresses: [address1,address2])

Teraz wyszukajmy sobie stan California poprzez zastosowanie

print(person[keyPath:\Person.primaryAddress.state])

a ukaże nam się

California

W skrócie

  • Szybsze, łatwiejsze w użyciu String, które zachowują poprawność Unicode
  • Ulepszenia w tworzeniu i manipulowaniu typami słowników i zestawów
  • Rozszerza obsługę archiwizacji i serializacji na typy struct i enum oraz umożliwia bezpieczeństwo typowe dla szeregowania do zewnętrznych formatów, takich jak JSON i plist

Zapewne Apple jeszcze ciekawego coś dla nas szykuje więc jasne, że nie przedstawiłem wam wszystkich zmian. Więc póki co pozostaje nam wyczekiwać. Na ten moment życzę miłego programowania i do następnego razu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *