질문 지켜보기

일반 질문

Q

스위프트 옵셔널 관련 질문

조회 451

좋아요 0

2017년 2월 1일

댓글 7

2017년 2월 1일
옵셔널 체이닝을 어떤 값의 중간에서 사용하게 되면 제일 뒤의 값에 상관없이 opitional 값이 리턴됩니다. 중간의 값이 nil일 수도 있기 때문입니다. 그러니까 1번 같은 경우에는 `(alert.textFields?.first?.text)`이 부분의 값은 옵셔널 값이지만 괄호 뒤에 `!`를 사용하셨기 때문에 괄호 안에 있는 전체 값인 `memo`의 타입이 옵셔널이 아닌 그냥 String으로 설정된것입니다. 3번에는 마지막 `text`부분에는 !를 붙이셨으니 optional chaining은 `textFields?` 와 `first?`에 한번이라도 사용하셨으면 마지막 값과는 상관없이 전체값이 옵셔널 타입이 되기 때문에 `memo`상수의 타입은 옵셔널 String이게 되는것이죠.
2017년 2월 1일
*수정: `text`부분에 `!`를 붙이셨으나 optional chaining을
2017년 2월 1일
그리고 마지막으로 `if memo != ""`에서는 memo에 `!`를 굳이 안써줘도 됩니다. `memo`가 옵셔널이면 오른쪽 `""` 부분도 옵셔널 문자열로 인식이 되기 때문입니다.
2017년 2월 2일
아하.. ?를 사용하면 무조건 옵셔널 타입을 반환하게 되는거군요 감사합니다!
2017년 2월 2일
감사합니다~
2017년 2월 2일
혹시 형변환씨 쓰이는 as! 와 as?의 차이점을 설명해주실수 있을까요?
2017년 2월 3일
예를 들어서 정수형으로 변환시키려 한다고 가정합시다. `as?`는 형 변환이 가능하면 옵셔널 정수형으로 변환시켜주고, 불가능하면 `nil`이 됩니다. `as!`는 옵셔널 타입이 아닌 진짜 정수형으로 변환시켜주는 대신, 불가능하면 오류가 나옵니다. 정말 확실할 때만 `as!`를 써주셔야 하는 거죠.

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇