
Język Swift już niebawem w nowej odsłonie (5.4). Co zatem wprowadzi nowa wersja? Możemy się spodziewać oczywiście jak zawsze kolejnych ulepszeń w kompilacji – przyspieszenia procesu oraz dokładniejszego wskazania błędów w liniach zawierających niepoprawny kod.
Poprawka SE-0287 wspiera składnię wielokrotnie złożonych wyrażeń, zamiast dotychczasowego wspieranie prostych wyrażeń.
Dotychczas, żeby na przykład określić kolor napisu, można było użyć samej nazwy koloru tylko gdy był to jedyny parametr:
Text("Ala ma kota")
.foregroundColor(.green)
Aby dodać dodatkowa cechę, konieczne było dodanie nazwy nadrzędnej:
Text("Ala ma kota")
.foregroundColor(Color.green.opacity(0.5))
Od wersji 5.4 można opuścić ten element:
Text("Ala ma kota")
.foregroundColor(.green.opacity(0.5))
Kolejnym ulepszeniem jest wsparcie przeciążania funkcji lokalnych. Swift rozpoznaje, której funkcji użyć w zależności od użytych typów, natomiast od wprowadzenia poprawki SR-10069, a to działanie jest możliwe także dla funkcji, które są zagnieżdżone wewnątrz nadrzędnej funkcji.
Podobne ulepszenie dotyczy dekoratorów właściwości. Property wrappers od wersji Swift 5.4 mogą być stosowane w funkcjach dla zmiennych lokalnych.
Poprawka SE-0284 rozszerza możliwości używania wielokrotnych parametrów wariadycznych dla funkcji czy inicjatorów – do tej pory możliwe było używanie tylko jednego parametru wariadycznego na raz.
Jako przykład można napisać funkcję która wyznaczy najlepszych uczniów i oceny z danego przedmiotu w klasie, która akceptuje jeden parametr wariadyczny przechowujący nazwiska uczniów oraz drugi przechowujący oceny uczniów.
func podajWyniki(uczniowie: String..., oceny: Int...) {
let top5Uczniowie = Studenci.wybierzNajlepszych(lista: uczniowie)
let top5Oceny = Studenci.wybierzNajlepsze(lista: oceny)
print("Nasi najlepsi uczniowie to \(top5Uczniowie.joined(separator: ", "))")
print("Najwyższe oceny to \(top5Oceny.joined(separator: ", "))")
}
Warunkiem poprawnego wywołania takiej funkcji jest etykietowanie wszystkich parametrów występujących po tych wariadycznych.
podajWyniki(uczniowie: "Jan Kowalski", "Adam Wiśniewski", oceny: 6, 5, 6, 3, 2, 1)
Nad poprawką SE-0289 pracowano już od dłuższego czasu, jednak dopiero teraz oficjalnie weszła i przyniosła ze sobą nowy element języka @resultBuilder, który wypiera dotychczasowy @_functionBuilder. To rozwiązanie wspiera tworzenie widoków w SwiftUI, a dokładniej – pozwala grupować widoki w ramach jednego stosu VStack i przechowywać je wewnętrznie jako TupleView. Elementem @resultBuilder musi być metoda statyczna buildBlock(), która odpowiada za pobranie danych i przetworzenie ich – w poniższym przykładzie będzie to łączenie napisów.
@resultBuilder
struct LaczenieNapisow {
static func buildBlock(_ elements: String...) -> String {
elements.joined(separator: "\n")
}
}
@LaczenieNapisow func polaczNapisy() -> String {
"Litwo! Ojczyzno maja! Ty jesteś jak zdrowie,"
"Ile cię trzeba cenić, ten tylko się dowie,",
"Kto cię stracił. Dziś piękność twą w całej ozdobie",
"Widzę i opisuję, bo tęsknię po tobie"
}
Możliwości są tu ogromne – koniecznie trzeba zapoznać się z dokumentacją.

Odkąd się zorientował, że istnieje, jest programistą. Programuje, planuje, organizuje, optymalizuje i wdraża. Przeszedł drogę od juniora, przez seniora, team leadera do architekta rozwiązań mobilnych. Współtworzył i nadal tworzy aplikacje mobilne dla największych polskich banków.