์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- algorithm
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- 0์ด๋์ด์๋๊ธธ
- SwiftUI Tutorials
- concurrency
- ๊ธฐ์ด๋ฌธ๋ฒ
- URLSession
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- IOS
- binarySearch
- DynamicProgramming
- duno
- SQL
- ๋์ ๊ณํ๋ฒ
- HAVIT
- ์ด์งํ์
- ํ๋ก๊ทธ๋๋จธ์ค
- GroupBy
- APPJAM
- SwiftUI
- GCD
- algoritm
- dfs
- SwiftUI ํํ ๋ฆฌ์ผ
- Til
- SOPT
- BFS
- discardableResult
- Swift
- ๊ณ ๋์ kit
- Today
- Total
suvera-dev ๐ฅฆ
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 5์ผ์ฐจ - UnWrap ์ต์ ๋ ๋ณ์ ๋ณธ๋ฌธ
๐ Optional ์ด๋ ?
- ํ์
์ ๊ฐ์ด ์์์๋ ์์์๋ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ ํ์
๋ค์ ?๋ฅผ ๋ถ์ฌ์ Optional ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ณ์์ ๊ฐ์ด nil ๋ ์ ์๋ค๋ ๊ฒ์ ํํํ๋ ๊ฒ
Optional ๋ณ์๋ค์ ๊ฐ์ด Optional("—-") ํ์์ผ๋ก ํ์๋๊ธฐ ๋๋ฌธ์ value ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ unwrapping์ ํด์ค์ผ ํฉ๋๋ค. unwrapํ๋ ๋ฐฉ๋ฒ์ ๋จผ์ Force unwrapping์ด ์์ต๋๋ค. ๊ฐ ๋ค์ !๋ฅผ ๋ถ์ด๋ฉด ๋๋๋ฐ ์ด๋ value๊ฐ nil์ธ ๊ฒฝ์ฐ์ force unwrapping์ ์๋ํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ Optional ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ค๋ฉด ?
Optinal ๋ณ์์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ Optional Binding ๊ณผ Optinal Chaining์ด ์์ต๋๋ค.
- Optinal Binding์ด๋ if let ๊ตฌ๋ฌธ์ด๋ guard let ๊ตฌ๋ฌธ์ผ๋ก ๋ฏธ๋ฆฌ ๋ณ์์ ๊ฐ์ด ์๋์ง ์๋์ง๋ฅผ ๊ฒ์ฌํ๋ ๋ฐฉ์์ ๋๋ค.
Optinal ํํ์์ ํ๊ฐํ์ฌ ๊ฐ์ด ์๋ค๋ฉด unwrapping ๋์ด ์์์ ์ ์ฅ๋ฉ๋๋ค. ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ง unwrapping ํ์ฌ crash ์ํ์ด ์์ต๋๋ค.
- Optinal Chaining ์ ํ์ property ์ optinal ๊ฐ์ด ์๋์ง ์ฐ์์ ์ผ๋ก ํ์ธํ๋ฉด์ nil ์ด ๋ฐ๊ฒฌ๋๋ฉด nil์ ๋ฐํํ๋ ๋ฐฉ์์ ๋๋ค. ๊ฒฐ๊ณผ๋ ํญ์ Optional์ด๋ฉฐ ํํ์ ์ค ํ๋๋ผ๋ nil์ ๋ฆฌํดํ ๊ฒฝ์ฐ ์ด์ด์ง๋ ํํ์์ ํ๊ฐํ์ง ์๊ณ nil์ ํธ์ถํฉ๋๋ค.
// ์ต์
๋์ด๋?
// ๊ฐ์ด ์๋์ง ์๋์ง ๋ชจ๋ฅธ๋ค.
var someVariable : Int? = nil
if someVariable == nil {
someVariable = 90
}
print("someVariable: ", someVariable)
// ์ธ๋ฉํ์ด๋? ๋ฉ ์ฆ ๊ฐ์ธ์ ธ์๋ ๊ฒ์ ๋ฒ๊ธฐ๋ ๊ฒ
if let otherVariable = someVariable {
print("์ธ๋ํ ๋์๋ค. ์ฆ ๊ฐ์ด ์๋ค. otherVariable : \(otherVariable)")
} else {
print("๊ฐ์ด ์๋ค.")
}
someVariable = nil
// someVariable ์ด ๋น์ด์์ผ๋ฉด ์ฆ ๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋์ ๋ฃ๊ฒ ๋ค.
let myValue = someVariable ?? 10
print("myValue: \(myValue)")
var firstValue : Int? = 30
var secondValue : Int? = 50
print("firstValue: \(firstValue)")
print("secondValue: \(secondValue)")
unwrap(firstValue)
unwrap(secondValue)
func unwrap(_ parameter: Int?) {
print("unwrap() called")
// ๊ฐ์ด ์์ผ๋ฉด ๋ฆฌํด ํด๋ฒ๋ฆฐ๋ค.
// ์ฆ ์ง๋๊ฐ๋ค.
guard let unWrappedParam = parameter else {
return
}
print("unWrappedParam: \(unWrappedParam)")
}
Swift์์ Optional์ ์ฌ์ฉํ๋ ์ด์ ๋ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ฒซ์งธ, Objc์ ๊ฐ์ฒด์ ์ํธ์์ฉ ํ๊ธฐ ์ํด์ ์ ๋๋ค. Objc์์๋ ์ด๋ค ๊ฐ์ฒด ์ฐธ์กฐ ๊ฐ์ด๋ nil์ด ๋ ์ ์์ด Optional์ด ํ์ํฉ๋๋ค.
๋์งธ, Instance Property์ ์ด๊ธฐํ๋ฅผ ์ฐ๊ธฐํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ViewController์ ๊ฒฝ์ฐ init ์ดํ์ View๋ฅผ loadํ๊ธฐ ๋๋ฌธ์ ๊ทธ ์ด์ ๊น์ง๋ View๊ฐ Optionalํด์ผ ํฉ๋๋ค.
์ ์งธ, ๊ฐ์ด ์์์ ํํํ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก Optinal์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์ด Runtime์ nil์ด ์ผ๊ธฐํ๋ ๋ฌธ์ ๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์ ์๋ฐฉํ ์ ์์ด ์์ ์ฑ์ด ์ฆ๊ฐํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
'Language > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift ) Closure (0) | 2022.02.09 |
---|---|
Swift ) @discardableResult ๋? (4) | 2022.02.08 |
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 4์ผ์ฐจ - For ๋ฐ๋ณต๋ฌธ & Wildcard Pattern (0) | 2022.02.07 |
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 3์ผ์ฐจ - Enum (0) | 2022.02.04 |
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 2์ผ์ฐจ - foreach ๋ฐ๋ณต๋ฌธ (5) | 2022.02.04 |