-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
변수 저장 질문
23.07.30 17:53 작성 조회수 145
0
변수에 값을 할당할때 두 단계를 나누지 않고 이미지처럼 userInput을 Int형으로 전환하고 바로 저장하지 않는 이유가 있을까요???
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
기초 5개의 앱을 문법적으로 분석하기 - 가위바위보, 업다운 (활용 앱 4강)
강의실 바로가기
답변을 작성해보세요.
1
앨런(Allen)
지식공유자2023.07.30
네 안녕하세요! Jun Chae 님.
var userInput = readLine()
에서 userInput 변수의 타입이 어떻게 되죠?
옵셔널 String 입니다.
즉, 위에 변수를.. 타입추론 방식이 아닌 타입을 붙여보시면 String? 입니다.
var userInput: String? = readLine()
String? 타입을 (옵셔널 문자열 타입을)
정수의 생성자에 Int( .... ) 넣는 것이 안됩니다.
정수의 생성자에는 Int(문자열)만 가지고 변형이 되지, Int(옵셔널 문자열)로 변형이 안됩니다.
그래서, (1) 문자열로 먼저 변형하고 (옵셔널 바인딩), (2) 정수로 변형하고 있는 것이예요.
guard let input = userInput, // 옵셔널 바인딩
let number = Int(input) // 옵셔널 바인딩으로 문자열이 된 input을 정수타입으로 변형하고 옵셔널 바인딩
else { break }
물론 두번째 과정에서는..
정수타입으로 변형 ( String 타입 ===> Int? 타입 ===> Int타입) 으로 옵셔널 바인딩까지 하고 있는 것입니다.
정수 타입으로 변형하는 과정..
즉, 아래의 과정은.. 원칙적으로 옵셔널 바인딩도 내포하고 있습니다.
(Int? 타입을 ===> Int으로 변형하는 과정)
guard let number = Int(input) else { break }
왜냐하면, 가드문이 아닌 곳에서
var number = Int(input)
이렇게 해보시면, number타입이 Int? 타입이 나올 것입니다. 왜냐면.. 문자열을 정수로 변형하는 과정에서 실패할 수도 있고, 실패하는 경우 nil이 나오기 때문입니다.
readLine( ) 함수는 문자열이 없는 경우(nil)도 대비하고 있기 때문에.. String? 타입이고, 옵셔널 바인딩을 한번하고, 정수로 변형하고 있다는 것을 이해하시면 됩니다.
물론 만약에 사용자한테서 입력값을 얻어오는 readLine 함수의 실행이 String?타입이 나오니..
var userInput = readLine()!
뒤에 느낌표를 바로 붙여서 강제 언래핑한다면 말씀하신 대로 userInput변수의 타입이 String이 나오니.. 이때는 질문 주신 것처럼 바로 변환이 가능하긴 하죠. 이미 userInput변수의 타입이 String이니까요.
(다만, readLine( )! 이 강제 언래핑을 의미하니.. 유저가 아무것도 입력하지 않았다면.. nil이 나와서, 에러가 날 수 있겠죠. 에러의 가능성을 가져가는 것보다.. 올바르게 처리하기 위해.. 저는 옵셔널 바인딩으로 한번 과정을 거치는 것을 보여드린 것이고요!)
위의 내용을 천천히 잘 이해 해보시길 바라고,
만약에 위의 내용이 이해가 잘 안되신다면.. ㅠㅠ
옵셔널 타입과 옵셔널 바인딩에 대해서 학습이 필요하실 것으로 보입니다.
감사합니다 :)
답변 1