UPD: С отключением буфера работает корректно в playground, попробуйте:
var counter = 0
setbuf(__stdoutp, nil)
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
guard counter < 5 else {
print("End")
timer.invalidate()
return
}
print(".", terminator: "")
counter += 1
}
RunLoop.main.run()
Пример кода для playground:
var counter = 0
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
guard counter < 5 else {
print("End")
timer.invalidate()
return
}
print(".", terminator: "")
counter += 1
}
RunLoop.main.run()
Используем таймер, каждую секунду делаем print и увеличиваем счетчик. Если нужные условия выполнены, прекращаем.
Но проблема в том, что при отработке в playground появляется все сразу по окончании.
. . . . . End
Если убрать terminator и делать только print("."), то точки корректно распечатываются столбиком в консоли.
.
.
.
.
.
End
Если взять этот же код и запустить на симуляторе/устройстве, то отрабатывает корректно:

Таким образом, это просто баг в playground. Ваш вариант без terminator тоже отработает в playground, но в программе все повесит на 5 секунд.