티스토리 뷰
Swift에선 옵셔널이란 키워드를 사용합니다.
1. 옵셔널이란?
- 값이 있을 수도, 없을 수도 있음을 표현합니다.
- nil이 할당될 수 있는지 없는지를 나타냅니다.
// someOptionalParm에 nil이 할당 될 수 있다.
func someFunction(someOptionalParam: Int?) {
// ....
}
/// someOptionalParm에 nil이 할당 될 수 없다.
func someFunction(someOptionalParam: Int) {
// ....
}
2. 옵셔널을 쓰는 이유
1) 명시적 표현
- nil의 가능성을 코드만으로 표현이 가능합니다.
- 위의 이유로 문서/주석 작성 시간을 절약할 수 있습니다.
2) 안전한 사용
- 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않고 사용할 수 있습니다.
- 예외 상황을 최소화하는 안전한 코딩이 가능합니다.
3. 옵셔널 문법과 선언
- 옵셔널 문법 = enum + generics
- 옵셔널 선언
- 느낌표(!)를 이용한 암시적 추출 옵셔널
var implicitlyUnwrappedOptionalValue: Int! = 100
switch implicitlyUnwrappedOptionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// 기존 변수처럼 사용 가능
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// nil 할당 가능
implicitlyUnwrappedOptionalValue = nil
- 물음표(?)를 이용한 옵셔널
var optionalValue: Int? = 100
switch optionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// nil 할당 가능
optionalValue = nil
4. 옵셔널 추출이란?
- 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것을 의미합니다.
5. 옵셔널 방식
1) 옵셔널 바인딩
- nil 체크 + 안전한 추출
- 옵셔널 안에 값이 들어있는지 먼저 확인하고, 값이 들어있을 때 값을 꺼내옵니다.
- if - let 방식 사용
func printName(_ name: String) {
print(name)
}
var myName: String? = nil
//printName(myName) // 컴파일 오류 발생
// 전달되는 값의 타입이 인자의 타입과 다름
if let name: String = myName {
printName(name)
} else {
print("myName == nil")
}
var yourName: String! = nil
if let name: String = yourName {
printName(name)
} else {
print("yourName == nil")
}
// if-let을 통해 선언한 상수는 구문 내에서만 사용 가능
// 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생
//printName(name)
// ,를 사용해 한 번에 여러 옵셔널을 바인딩할 수 있음
// 모든 옵셔널에 값이 있을 때만 동작함
myName = "TT"
yourName = nil
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
// yourName이 nil이기 때문에 실행되지 않음
yourName = "SS"
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
// TT and SS 출력
2) 강제 추출
- 옵셔널에 값이 들어있는지 확인하지 않고 강제로 값을 꺼내오는 방식입니다.
- 만약 값이 없을 경우(nil) 런타임 오류가 발생합니다.
var myName: String? = TT
var youName: String! = nil
printName(myName!) // TT 출력
myName = nil
//print(myName!)
// 강제추출시 값이 없으므로 런타임 오류 발생
yourName = nil
//printName(yourName)
// nil 값이 전달되기 때문에 런타임 오류발생
* [부스트코스] iOS 프로그래밍을 위한 스위프트 기초 학습 후 정리한 내용입니다.
'iOS > Swift' 카테고리의 다른 글
Swift 문법 (9) - 열거형 (0) | 2020.12.08 |
---|---|
Swift 문법 (8) - 구조체(Struct), 클래스(Class) (0) | 2020.12.07 |
Swift 문법 (6) - 반복문 (0) | 2020.12.06 |
Swift 문법 (5) - 조건문 (0) | 2020.12.03 |
Swift 문법 (4) - 함수 (0) | 2020.12.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Kotlin
- ARKit
- 백준온라인저지
- Swift unowned
- coreml
- DispatchQueue
- 프로그래머스
- SwiftUI
- Swift
- 백준
- 안드로이드
- 카카오인턴십
- rxswift6
- GraphDB
- ios
- blendshapes
- Swift weak
- cocoapods
- C++
- Reactivex
- SWEA
- Lottie
- boj
- rxswift
- blendshape
- disposeBag
- infallible
- Neo4j
- 알고리즘
- 코코아팟
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
글 보관함