[Swift]_Input

Swift Input

Swift에서 Input을 받는 방법

Swift를 iOS개발로만 배우다보니 언어를 배울때 기본중의 기본은 입출력 조차 잘 모르고 있었다… input…? textfield…?? 어떻게 하는거지…?!

Swift에서는 readLine()을 통해서 입력을 받을 수 있다.

print("Please your favorite language.")
let language = readLine()
print("My favorite Language is \(language)")

다음과 같이 사용할 수 있다.
readLine()Optional String을 리턴한다.

공백이 있는 문자열 입력 받기.

흔한 입력중에 공백을 갖고있는 문자열을 입력받을 때가 있다.
2가지 방법에 대해 알아보겠다.

  1. Foundation framework에서 제공하는 components(separatedBy: " ") 메소드를 사용하는 것이다.
import Foundation

if let input = readLine() {
 let a = input.components(separatedBy: " ")
}
  1. String 자체의 split(separator: " ") 을 사용하는 것이다.
if let input = readLine() {
 let a = input.split(separator: " ")
}

둘에는 약간의 차이점이 있다.
우선 보시다시피 1번의 경우 반드시 Foundation을 import 시켜줘야 한다. PS를 할 경우 속도에 꽤나 영향을 미친다.

또 1번의 경우 [String], 2번은 [String.SubSequence]를 리턴한다. 하지만 이를 사용하는 방법은 별 차이가 없다. 똑같이 a[0], a[1]과 같이 일반 배열을 사용하듯이 사용할 수 있고, 하위 메서드들 또한 같이 갖고 있다.

String.SubSequence 란 A slice of a string 으로 String의 조각들이라고 보면된다.

공식 문서에서는 다음과 같이 나와 있는데, SubSequence는 문자열 전체의 참조까지 갖고 있어, 저장할 경우에 메모리 누수가 발생할 수 있다고 한다. 특정 작업을 수행할 경우에만 쓰라는 말인 것 같다. 사실 이 부분은 겪어보지 못해 이해가 잘 가지 않아 추후 공부 더 공부를 해야할 것 같다.
String.SubSequence

공백이 있는 문자열 Int 타입으로 입력 받기.

위에서 공백이 있는 문자열을 입력받는 방법에 대해 알아보았다. 하지만 readLine()을 통해 입력받은 문자열은 [String] 타입으로만 저장된다. 이를 다른 타입으로 저장하려면 어떻게 해야할까?

기본 형변환처럼 Int(readLine()!) ?? 여러 방법을 해보면 알겠지만… 저런식으로는 [String]타입을 형변환 시킬 수가 없다. 그렇다면 for문을 돌려 일일이 변환시켜야 할까…? 물론 그렇게도 할 수 있겠지만… 그게 최선인가…

split 함수에 map을 사용해서 해결할 수 있다.

if let input = readLine() {
 let a = input.split(separator: " ").map{Int($0)}
}

$0 은 split을 통해 나뉘어진 배열의 각 요소 요소를 뜻한다. 이를 응용하면 단순히 타입 변환뿐만 아니라 여러 계산도 가능하다.

공부하며 배운 내용을 정리하고 있습니다. 잘못된 부분이 있을 수 있으니 문제가 있는 부분은 댓글을 통해 지적해주시면 감사하겠습니다.

댓글

이 블로그의 인기 게시물

CGV 상영시간표 알리

[Swift Error] Outlets cannot be connected to repeating content.

tensorflow softmax_cross_entropy_with_logits