Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 독학
- 열거형
- SeSAC
- Threading
- 프로퍼티 관찰자
- Realm
- 함수
- userDefaults
- swift
- TableView
- xcode
- 패스트캠퍼스후기
- RawValue
- 직장인인강
- 문자열 보간법
- 패캠챌린지
- beginAsyncWrite
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- ios
- 옵셔널 체이닝
- switch
- 기본문법
- Git
- 직장인자기계발
- cancelAsyncWrite
- 패스트캠퍼스
- 인스펙터
- Optional Chaining
- enum
- Background
Archives
- Today
- Total
아삭아삭 iOS 개발
[Swift 독학] 패스트캠퍼스 챌린지 16일차_옵셔널 추출 본문
옵셔널 값을 추출(optional unwrapping) 방법에는 크게 2가지 명시적 해제와 묵시적 해제가 존재합니다.
보다 세분화해서 살펴보면 각각 강제 해제/비강제 해제, 비교연산자 이용 해제/! 이용 해제 등으로 작게 4가지 방법을 사용할 수 있습니다.
방법 하나하나 예시를 들어가며 살펴보겠습니다.
※ 주의! 본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.
반응형
■ 명시적 해제
1-1. 강제 해제 (force unwrapping)
- 옵셔널로 선언된 변수 뒤에 ‘!’를 붙여서 적용
- '!'는 옵셔널 강제 해제 연산자
- 옵셔널 값을 추출하는 위험한 방법
→ 값이 nil인 옵셔널을 강제로 해제할 경우, 값이 없으므로 런타임 오류가 발생하며 프로그램 강제종료될 가능성 존재
var someValue: Int? = 7
print(someValue) // 결과 : “Optional(7)\n”
print(someValue!) // 결과 : “7\n”
1.2 비강제 해제 (=옵셔널 바인딩; optional binding)
- 강제 해제보다 안전한 방법
- if-let 구문 활용 가능
→ 옵셔널을 추출하여 할당받은 변수(또는 상수) 이름 앞에 if-let 를 표기
→ 만약 추출이 실패할 경우, else 구문 실행
→ 여러 옵셔널 변수들을 쉼표(,)를 사용하여 한번에 바인딩 가능
(단, 옵셔널 바인딩한 값은 if 블록 내에서만 사용 가능. else 블록에서도 불가)
var someValue: Int? = 7
if let result = someValue {
print(someValue)
} // 결과 : “7\n”
- guard-let 구문 활용 가능
→ 옵셔널 값을 추출하여 할당할 변수(또는 상수) 이름 앞에 guard-let를 표기
→ guard문 다음, 함수 전체 구문에서 추출된 변수나 상수 사용 가능
→ guard문은 조건이 true일때만 guard문을 통과, false면 else구문을 실행시킨 뒤 종료
func someFunc() {
let someValue: Int? = 7
guard let result = someValue else { return }
print(result)
}
someFunc() // 결과 : “7\n”
■ 묵시적 해제
2-1. 컴파일러에 의한 자동 해제
- 비교연산자를 사용
- 옵셔널을 비교연산자를 이용하여 다른값과 비교시
컴파일러가 옵셔널을 자동으로 해제
let someValue: Int? = 7
if someValue == 7 {
print(“someValue는 7입니다.”)
} else {
print(“someValue는 7이 아닙니다.”)
} // 결과 : “7\n”
2-2. 옵셔널의 묵시적 해제
- 값을 사용할때 자동으로 옵셔널이 해제가 되는 것
- 반환타입 뒤에 (옵셔널임을 나타내는)?를 !로 변경하여 묵시적 옵셔널 해제
- 일반값처럼 자유롭게 연산작업 가능
let thisYear = “2022”
<옵셔널 해제 없이 실행할 경우>
var threeYearLater: Int? = Int(thisYear) // 결과 : 2022
print(threeYearLater + 3) // 결과 : 에러발생
<옵셔널의 묵시적 해제 적용할 경우 (? → ! 로 변경)>
var threeYearLater: Int! = Int(thisYear) // 결과 : 2022
print(threeYearLater + 3) // 결과 : “2025\n”
■ fast campus강의 외 참조자료
[1] https://blog.yagom.net/550/
[2] https://bbiguduk.gitbook.io/swift/language-reference/types#optional-type
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[Swift 독학] 패스트캠퍼스 챌린지 18일차_클래스 (0) | 2022.02.10 |
---|---|
[Swift 독학] 패스트캠퍼스 챌린지 17일차_구조체 (0) | 2022.02.09 |
[Swift 독학] 패스트캠퍼스 챌린지 15일차_옵셔널 (0) | 2022.02.07 |
[Swift 독학] 패스트캠퍼스 챌린지 14일차_반복문 (0) | 2022.02.06 |
[Swift 독학] 패스트캠퍼스 챌린지 13일차_조건문 (0) | 2022.02.05 |