Swift의 표준 함수 중에서 input()
과 같은 함수가 없었는데, readLine()
함수가 생겼다. 원형은 다음과 같다.
@warn_unused_result func readLine(stripNewline stripNewline: Bool=true) -> String?
이 함수는 키보드로부터 입력받은 문자열을 (UTF-8로 가정한다) 리턴해준다. 물론 디코딩상의 문제가 있을 수 있어서 출력되는 값은 옵셔널이다. Swift에서는 C함수를 그대로 사용할 수 있고, C의 표준 라이브러리들은 기본적으로 Foundation 프레임워크에 포함되어 있는데, 요상하게 입출력에 관련된 함수 (scanf
, printf
등)은 호출할 수가 없었다.
이 함수가 추가하기 전에는 표준입력을 NSFileHandle로 구현해서 다음과 같이 구현해야 했다.
func input() -> String? {
let kbd = NSFileHand.fileHanleWithStandardInput()
let data = kbd.availableData
return NSString(data:data, encoding:UTF8StringEncoding) as? String
}
프롬프트를 포함하는 키보드 입력 받기
대신 readLine()
함수는 파이썬의 input()
처럼 프롬프트를 지정할 수 없기 때문에 다음과 같이 입력 받기 전에 줄바꿈 없이 텍스트를 출력하는 부분을 추가해주어야 한다.
func input(prompt: String?=nil) -> String? {
if let prompt = prompt, !prompt.isEmpty {
print(p, terminator:"")
}
return readLine()
}