Poprzednia wersja się sypała bo “kraszował” ją przypadek gdy nie podano żadnych liczb.
Czyli pusta linia i odrazu ENTER (tylko kod końca linii). W pętli while warunkiem na wykonanie
jej ciała jest opcjonalnie wiązana zmienna n. Jeśli operator rzutowania Int zdoła przekazać
opakowaną liczbę, to while ją rozpakuje dla zmiennej niemodyfikowalnej n i udostępni
ją dla swojego ciała. Jeśli zaś Int tego nie zdoła while zauważy wartość nil i przekaże dalsze sterowanie poza swoje ciało. A tak się stanie gdy funkcja readLine() sczyta ze standardowego
wejścia linię bez znaku (tylko sam znak końca linii, który odrzuci). Wtedy w Swift 4.2.2 readLine()
zwraca nil a operator ?? to widzi i zamienia na pusty string “” zaś Int nie może tego zrzutować do spakowanej liczby. W Swift 5.3 to poprawiono i readLine() odrazu zwraca spakowany pusty string Optional("").
import Foundation
var t = [Int]()
while let n = Int(readLine() ?? "") {
t.append(n + (t.last ?? 0))
}
if t == [] {
print()
} else {
(0..<t.count).forEach {
print(t[$0])
}
}