Что вам нужно, так это «функция редактирования строки», предоставляемая libedit в macOS.
Чтобы использовать ее из инструмента командной строки Swift, вам необходимо
#include <readline/readline.h>
в заголовочном файле моста, - добавьте «libedit.tbd» в раздел «Связать двоичные файлы с библиотеками» в «Этапы сборки» вашей цели.
Вот минимальный пример программы Swift:
while let cString = readline("prompt>") {
let line = String(cString: cString)
free(cString)
print(line)
}
Важно: Вы должны запустить это в Терминале, оно не будет работать должным образом вКонсоль отладчика Xcode.
Каждая строка ввода может быть отредактирована перед вводом Return , аналогично тому, что вы можете сделать в Терминале.А с
while let cString = readline("prompt>") {
add_history(cString) // <-- ADDED
let line = String(cString: cString)
free(cString)
print(line)
}
вы даже можете использовать клавиши со стрелками вверх / вниз для перехода к ранее введенным строкам.
Для получения дополнительной информации звоните man 3 readline
в Терминале.
Вот возможная вспомогательная функция:
func readlineHelper(prompt: String? = nil, addToHistory: Bool = false) -> String? {
guard let cString = readline(prompt) else { return nil }
defer { free(cString) }
if addToHistory { add_history(cString) }
return(String(cString: cString))
}
Пример использования:
while let line = readlineHelper(addToHistory: true) {
print(line)
}