Swift

readLine()을 통해 키보드로 입력받기 - swift

나른한코딩 2021. 7. 19. 18:08

xcode에서 키보드로 부터 값을 입력받는 방법을 알아보자!

 

swift에서는 readLine() 함수를 통해 키보드로부터 입력값을 받아올 수 있다.

.

.

.

공식문서

항상 공식문서를 먼저 보는 습관을 들이자.

공식문서를 보면..

 

swift readLine() 함수

" EOF까지 혹은 현재 줄의 끝에 도달할 때까지의 표준입력을 읽어 문자열로 리턴한다. "

라고 되어있다.

(EOF란, End-Of-File의 약자로 파일의 끝을 의미한다.)

근데 자세히 보니 리턴값이 옵셔널 문자열 이다. 

한번 실습을 통해 연습해보자.

실습준비

표준 입력을 받고자할 때는 프로젝트를 생성하고 작성해야 한다.

(playground는 샌드박스이기 때문에 input이 없다고 한다. 그래서 actual application을 통해서만 input을 받을 수 있다.)

 

실습 가능한 actual application 파일 생성 방법은 다음과 같다.

들어가는 경로는 xcode > project > macOS > commandLineTool 

xcode Command Line Tool

Let's Code!

(오늘은 playground에서 실습을 못하니까 lets code...ㅎㅎ)

 

우선 readLine() 함수를 input변수에 담아 print 해 보았다. 

실행 결과는

.

.

.

.

 

경고문이 뜬다. 

 

아까 공식문서의 리턴값이 String? 이었던 것에 대한 경고문이 뜬다.

그리고 출력값도 Optional 로 출력된 것을 볼 수 있다!

 

옵셔널을 unwrapping 해주어야 겠죠??

(Optional unwrapping에 대해서는 나중에 추가적으로 글을 작성 하고나서 링크를 달아둘 예정입니다.)

 

우선 !를 통해 강제해 주었습니다.

readLine() - 2

경고문이 사라졌죠? 출력 결과도 옵셔널이 벗겨진 상태로 잘 출력된 것을 볼 수 있습니다.

 

readLine()을 활용한 간단한 예제

readLine()을 통해 inch로 된 길이를 키보드로 입력값을 받고, cm로 변환된 값을 출력해겠습니다.

 

우선 input과 print문을 작성해주었습니다.

var input = readLine()!
print("제품의 크기(cm): \(input * 2.54)")

과연 출력이 잘 될까요?

그 결과는

.

.

.

.

 

Error.

당연한 결과 입니다ㅠㅠ,,

아까 위에서 보면 readLine() 의 리턴값은 String? 이고,

그걸 우리가 ! 를 사용해서 강제로 언래핑 해주었잖아요?

 

그러면 input의 타입은 String 인데,

String타입인 input과 Double타입인 2.54를 곱셈하려 하였으니..ㅎㅎ

 

자, 그럼 다시!

input값을 Double로 형변환을 해주는 코드를 추가해주어 봅시다.

var input = Double(readLine()!)
print("제품의 크기(cm): \(input * 2.54)")

다시 실행~

guess what 과연 잘 작동할까요?

.

.

.

.

 

두둥. 당연히 다시 Error가 납니다.

왜냐. 저희가 string값을 double타입으로 형변환을 해주는데,

input으로 받은 string값이 꼭 숫자만 들어있을 것이라는 법이 없잖아요? (문자일 수도 있으니)

 

우리는 inch를 입력값으로 받아 cm로 출력해줄 것이 때문에 input은 무조건 숫자일 것입니다.

그러므로 한번 더 ! 를 붙여 강제 언래핑을 해봅시다.

var input = Double(readLine()!)!
print("제품의 크기(cm): \(input * 2.54)")

그 결과는

.

.

.

.

 

readLine() - 3

짠!

3이라는 숫자를 입력하여 input에 받아주고 enter를 누르니

cm로 변환된 제품의 크기가 잘 출력되는 것을 볼 수 있습니다.ㅎㅎ

 

이렇게 한가지 인자를 키보드로부터 입력받아 출력하는 과정을 해보았습니다.

 

그런데,

여기서 질문.

지금은 값을 1개만 입력받았는데, 내가 여러개의 값을 인자로 받고 싶다면 어떻게 해야할까?

 

 

이럴 때 components 를 쓰면 됩니다! (components에 대한 자세한 설명은 아래 글을 참고하세요!)

https://nareunhagae.tistory.com/8

 

문자열 자르기 components & split - swift

특정 문자를 기준으로 문자열을 자를 때 사용하는 함수는 크게 components 와 split 이 있다. 각 함수 Summary를 보자. (자세한 정의는 위의 함수 링크를 참고) 차이점 프레임워크/라이브러리 : components

nareunhagae.tistory.com

 

readLine() 함수로 받은 값은 String이기 떄문에 components 함수를 사용해서 잘라 줄 수 있습니다.

한번 해볼까요??ㅎㅎ

 

이번에도 간단한 예제를 들어서 

두 수를 입력받아 곱셈 결과를 출력하는 것을 해보겠습니다~

 

코드는 다음과 같습니다. (참고 : if let을 통해 바인딩 해주시면 ! 로 강제 언래핑을 해주지 않아도됩니다)

var input = readLine()!
let inputArray = input.components(separatedBy: " ").map{ Double($0)! }

print("\(inputArray[0]) X \(inputArray[1]) = \(inputArray[0] * inputArray[1])")

실행해봅시다~

.

.

.

.

여러개 readLine 으로 받아서 값 활용하기

잘 되는 것을 볼 수 있지요?ㅎㅎ

 

오늘은 여기까지!

 

👩🏻‍🏫 궁금하신 사항 있으면 댓글로 남겨주세요~ 그럼 20000.

 

틀린부분이 있거나, 더 좋은 방법이 있다면 댓글로 남겨주세요! 
🌈댓글은 언제나 환영입니다🙏🏻

반응형