UITextField.text, UITextView.text

이원희·2020년 12월 11일
2

📱 iOS

목록 보기
6/24
post-thumbnail

이번 포스팅은 별다른 얘기이지만 별다른 얘기가 아닌 그런 포스팅이다ㅋㅋㅋㅋ
UITextViewUITextField에 대해서 자세하게 다루는 그런 포스팅은 아니고 그냥 코드 리뷰 받으면서 새롭게 알게된 점이 신기해서 남기는 포스팅이다.
(근데 나만 모르고 있었을 가능성 있다..)

UITextField.text는 왜 optional일까?


Apple Developer Document에서 UITextField의 text 프로퍼티가 optional임을 확인할 수 있다.
나도 기계적으로 UITextField의 text를 사용할때에는 기계적으로 optinal을 벗기고 사용했다.

프로젝트를 진행하며 리뷰를 받았고, text를 언제 가져오지 못하는지에 대해서 의문을 갖게되었다.
같이 알아보자ㅋㅋㅋㅋ


Apple Developer Document에서 UITextField.text를 보면 위의 사진과 같다.
text 프로퍼티가 optinal로 정의되어 있음을 확인할 수 있다.
Discussion 부분을 보면 This string is @"" by default.라는 구문이 있다.

❗️아니 text는 optional인데 왜 빈 문자열이 default야? 빈 문자열은 nil이 아닌데?!
라고 생각할 수 있다.
(일단 내가 그랬음...)

UITextField.text가 비어있다면?!

이유를 알아보기 전에 UITextField가 비어있을때를 확인해보자.

empty를 통해 현재 textField에 text가 비어 있음을 알 수 있다.
textField의 text가 optinal이므로 text가 비어 있을때 nil이 출력될 줄 알았으나 빈 문자열이 출력된다.

그렇다면 이번에는 textField의 text에 nil을 지정하고 출력해보자.

textField의 text에 nil을 저장했는데 빈 문자열이 출력되는 것을 확인할 수 있다.

우리는 위의 두 과정을 통해 textField.text의 default가 빈 문자열임을 알 수 있다.
또한, nil로 저장해도 text를 get할때 빈 문자열을 return함을 알 수 있다.

그렇다면 default가 빈 문자열인데 text는 optional일까?

이는 Objective-C와의 호환성 때문이다.
Objective-C에서는 textField의 text에 nil을 할당할 수 있었기 때문이다.

그렇다면 UITextView.text는 어떨까?

우선 Apple Developer Document부터 확인해보자.

Optional인 textField.text와 달리 textView.text는 강제 언래핑한 형태이다.
(optional이나 강제 언래핑에 대해 더 알고싶다면 여기서 보도록 하자.)

UITextView의 text가 비어 있을때를 확인해보자.

textView.text도 위의 textField.text와 동일하게 text가 비어 있을때 빈 문자열을 return한다.
그렇다면 text에 nil을 저장해도 빈 문자열을 출력하는지 확인해보자.

오!! textView.texttextField.text와 동일하게 nil을 저장했어도 빈 문자열을 return한다.
textView.text는 강제 언래핑된 타입이므로 nil을 지정할 수는 있다.
하지만 text를 get할때 강제 언래핑되므로 내부적으로 처리해서 nil이 아닌 값을 return 해주는거 같다.

마무리

오늘은 UITextField와 UITextView의 text에 대해서 알아봤다.
이전에는 UITextField.text 혹은 UITextView.text 값이 optional이므로 기계적으로 옵셔널 바인딩을 했었는데 기본적으로 빈 문자열을 return 한다는 점이 흥미로웠다.
앞으로도 이런 흥미로운 사실들을 많이 알길 바라며 오늘은 그럼 이만👋

0개의 댓글