키보드로부터 문자열을 입력받는 함수
Swift의 표준 함수 중에서 input()
과 같은 함수가 없었는데, readLine()
함수가 생겼다. 원형은 다음과 같다.
@warn_unused_result func readLine(stripNewline stripNewline: Bool = true) ->; String?
이 함수는 키보드로부터 입력받은 문자열을 (UTF-8로 가정한다) 리턴해준다. 물론 디코딩상의 문제가 있을 수 있어서 출력되는 값은 옵셔널이다. 요상하게도 C의 대부분의 함수는 그대로 사용할 수 있는 것 같은데 입출력에 관련된 함수 (scanf
, printf
등)은 쓸 수가 없다.
이 함수가 나오기 이전에는 다음과 같은 식으로 구현해서 쓸 수는 있었다.
func input() ->; String {
let kbd = NSFileHandle.fileHandleWithStandardInput()
let data = kdb.availableData
return NSString(data:data, encoding:UTF8StringEncoding) as! String
}
문제는 이런 코드는 앞에 프롬프트 출력이 되지 않는 문제가 있다.
print("yourname: ", terminator:"")
let s = input()
print("hello, \(s)")
// (출력되지 않음) sooop
// yourname: hello, sooop
하지만 readLine
함수는 이런 문제가 말끔히 해결된다.
func input(prompt: String?=nil) -> String? {
if let p = prompt where !p.isEmpty {
print(p, terminator:"")
}
return readLine()
}
if let s = input("yourname: ") {
print("hello, \(s)")
}
게다가 Foundation에 의존하지 않기 때문에 스크립트로도 충분히 작동한다.