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 | 31 |
Tags
- 프로그래머스 문자열 정렬하기 (1)
- 프로그래머스 n의 배수 고르기
- 주사위 게임1
- Til
- 프로그래머스 배열 만들기1
- 연산자
- 프로그래머스 조건에 맞게 수열 변경하기 3
- 프로그래머스 n번째 원소까지
- n번째 원소까지
- 프로그래머스 암호 해독
- 스파르타 코딩클럽 내일배움캠프
- 문자열 붙여서 출력하기
- 프로그래머스 주사위 게임1
- array
- 객체지향
- continue
- Break
- ruby설치
- 조건에 맞게 수열 변경하기 3
- 배열 만들기1
- 스페인어
- cocoapods 설치 오류
- swift
- Error installing cocoapods
- 프로그래머스 자동커밋
- 프로그래머스 최댓값 만들기(2)
- 스파르타코딩캠프
- 프로그래머스
- 프로그래머스 문자열 붙여서 출력하기
- 문자열 정렬하기 (1)
Archives
- Today
- Total
dev._.note
[Swift] Optional(옵셔널) 본문
Optional
- Optional은 wrapped 값, nil, 값의 부재를 의미한다. -> Optional 변수에 nil 할당 가능
- 장점
- nil 가능성을 코드만으로 표현이 가능함으로 문서작성 시간 최소화.
- Optional 인스턴스는 nil이 아니라는 약속이기 때문에 nil 체크를 하지 않고 사용이 가능하고 이는 효율적 코딩을 도움.
- nil로 인한 예외 상황을 최소화 하기 때문에 보다 안전한 코딩이 가능.
Declartion
@frozen enum Optional<Wrapped>
Optional 선언
- 선언에는 짧은 선언 방법과 긴 선언 방법이 있다. 의미상 동일하나, 읽고 쓰기 쉬운 짧은 선언 방법을 사용을 더 많이 한다.
let shortForm: Int? = Int("42")
let longFrom: Optional<Int> = Int("42")
- Optional 타입은 2가지 경우의 열거형으로 이루어져 있다.
- Optional.none은 nil과 같고, .some(Wrapped)은 wrapped 값을 저장하고 있다.
let number: Int? = Optional.some(42)
let noNumber: Int? = Optional.none
print(number)
// Prints "Optional(42)"
print(noNumber)
// Prints "nill"
print(number)의 출력 결과를 보면 Integer인(42)가 Optional 인스턴스로 Wrapping된 것을 확인할 수 있다.
여기서 Wrapping의 개념을 알아보고 Optional을 설명한다.
Wrapping
- wrapping이란 무엇을 의미하냐 인스턴스를 wrap(감싸다)는 형태를 말한다. Optional 타입은 모두 wrap되어 있다.
- Optional 타입으로 선언된 변수가 가지고 있는 값은 모두 wrap되어 있기 때문에 nil인지 특정한 value인지 컴파일러는 확인할 수 없다. 그러므로 안전을 위해 Optional 인스턴스로 반환 되는것을 확인할 수 있다.
다음 예는 dictionary를 이용하여 이미지의 이름과 경로를 사용한 예시다.
let imagePaths = ["star": "/glyphs/star.png",
"portrait": "/images/content/portrait.jpg",
"spacer": "/images/shared/spacer.gif"]
print(imagePaths["star"])
// Prints "Optional("/glyphs/star.png")"
위 예시를 보면 dictionary의 subscript로 접근시 return value 값 또한 Optional 인스턴스임을 확인할 수 있다.
그러면 Optional 인스턴스에 있는 vlaue를 다른 코드에서 사용하기 위해선 unwrap을 해야한다. swift는 여러가지 안전한 방법을 제공한다.
그 중 2가지 방법은 Optional Binding 방식과 Unconditional Unwrapping 즉 Optional 강제 추출이다.
🦭 Optional Binding
- nill을 체크하고 값을 가져오는 안전한 방법이다.
- if-let 방식과 gauard let 방식, switch로 추출할 수 있다.
if let 방식
- 만약 startPath가 값이 존재하지 않는 경우, 즉(nil)이라도 runtime error가 아닌 else문을 통해 예외 처리를 할 수 있으므로 안전하다.
if let startPath = imagePaths["star"]{ print("The star image is at '\(startPath)'") } else { print("Couldn't find the star image") } // Prints "The star image is at '/glyphs/star.png'"
❌ Unconditional Unwrapping
- Optional 인스턴스의 value가 nil이 아닌 특정한 값이 라고 확신할 때
("!")연산자를 이용하여 강제적으로 값을 upwrap 할 수 있다. - 아래 예시에서 Int의 생성자는 강제적으로 unwrapped된다.
이 방법은 만약 값이 없을때 즉 nil 이면 런타임 에러를 발생시킴으로 강제 추출 방법은 필수적인 경우가 아니면 사용하지 말자!let number = Int("42")! print(number) // Prints "42"
'Dev > SWIFT' 카테고리의 다른 글
[Swift] 기본자료형 및 숫자 타입 (0) | 2023.11.16 |
---|---|
[Swift] Currying(커링) (0) | 2023.11.15 |
[Swift] IBAction과 IBOutlet (1) | 2023.11.13 |
[Swift] Dictionary (사전형) (0) | 2023.11.12 |
[Swift] Set (집합) (0) | 2023.11.10 |