Co nowego w Swift 3?

W ostatnim czasie język Swift został zaprezentowany w nowej wersji 3.0. W związku z tym możemy zauważyć modyfikacje dotyczące usunięcia funkcji, które zostały już wycofane w Swift 2.2. Z drugiej strony widzimy zmiany dotyczące modernizacji języka.
Pętla for w stylu języka C
Do tej pory mogliśmy używać standardowej konstrukcji pętli for znanej z Języka C. W Swift 3 nie wolno już tego robić. Jako odpowiedniki przychodzą nam z pomocą otwarty i półotwarty operator zakresu.
for(var i = 0; i < 10; i += 1) {
print(i)
}
for i in 0...9 {
print(i)
}
Alternatywnie możemy skorzystać z pętli for-each.
(0…9).forEach {
print($0)
}
Operatory ++ i —
Operatory inkrementacji i dekrementacji występują w dwóch rodzajach: z przedrostkiem lub z przyrostkiem. Wycofanie tych operatorów jest konsekwencją błędów występujących podczas wyboru ich odpowiedniego rodzaju oraz likwidacji pętli for w stylu języka C.
var i = 0
i++ // Error, XCode offers to use:
i += 1
Poniższy kod nie działa w wersji 3.0.
i++
++i
i--
--i
Krótka jako lista argumentów do funkcji
Do tej pory możliwe było skorzystanie z mało znanej funkcji, aby przekazać całą listę argumentów jako pojedynczą wartość.
printNames(firstParameter: 7, secondParameter: 8)
let singleValue = (firstParameter: 7, secondParameter: 8)
printNames(singleValue)
Aktualna wersja nie pozwala już na takie praktyki.
Etykieta dla pierwszego parametru funkcji
W Swift 2 i wcześniej nazwy metod nie wymagały etykiety dla pierwszego parametru.
printNames(8, secondParameter: 7)
W nowej wersji trzeba określić również etykietę dla pierwszego parametru.
printNames(firstParameter: 8, secondParameter: 7)
Apple oferuje jednak sposób na ominięcie tego wymogu.
printNames(_ firstParameter: 8, secondParameter: 7)
Var w parametrach funkcji
W większości przypadków nie potrzebujemy modyfikować parametrów funkcji w jej wnętrzu, dlatego definiowane są one jako stałe. Zdarzają się jednak sytuacje, w których jest to pomocne. W Swift 2 można użyć do tego słowa kluczowego var, które poprzedza nazwę parametru funkcji.
func myFunction(var firstValue: Int, var secondValue: Int) -> Int {
firstValue += 1
return firstValue
}
Najnowsza wersja usuwa var z parametrów funkcji. Należy więc przypisać wartości parametrów funkcji do zmiennych lokalnych.
func myFunction( firstValue: Int, secondValue: Int) -> Int {
var firstValue = firstValue
firstValue += 1
return firstValue
}
Zbędne słowa
Nazwy metod, które zawierały oczywiste słowa, mają teraz te słowa usunięte. Sprawia to, że nazwy metod są znacznie krótsze.
//Swift 2
"Hello World".capitalizedString
let color = UIColor.blackColor
let numbers = [1,2,3,4]
numbers.maxElement()
UIDevice.currentDevice()
//Swift 3
"Hello World".capitalized
let color = UIColor.black
let numbers = [1,2,3,4]
numbers.max()
UIDevice.current
}
Konwencja nazewnictwa
Swift 3 dzieli metody na dwie grupy:
- wykorzystujące rzeczowniki do nazewnictwa – zwracają one pewną wartość,
- wykorzystujące czasowniki – wykonują one na elementach pewne działania.
// Enumerate() w Swift 3
var numbers = [17, 26, 1, 36]
for (index, value) in numbers.enumerated() {
print("tab[\(index)] = \(value)")
}
Kolejnym przykładem mogą być metody sort() i sortInPlace(). Zostały one teraz zastąpione odpowiednio przez metody sorted() i sort().
//Swift 2
let newArrayInSwift2 = numbers.sort()
print(newArrayInSwift2)
// Swift 3
let newArrayInSwift3 = numbers.sorted()
print(newArrayInSwift3)
//Swift 2
numbers.sortInPlace()
print(numbers)
//Swift 3
numbers.sort()
print(numbers)
Każda nowa wersja Swifta sprawia, że język staje się łatwiejszy do nauczenia, łatwiejszy w użytkowaniu oraz coraz szybszy. Swift 3 zawiera wiele fundamentalnych zmian, które wpłyną na nasz istniejący kod i pomogą uniknąć części błędów w przyszłości.