콘텐츠로 건너뛰기
Home » (Swift) 키보드로부터 문자열을 입력받기

(Swift) 키보드로부터 문자열을 입력받기

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()
}