Swift๋ ์์ ์ฑ์ ์ค์ํ ์์ ์ค ํ๋๋ผ๊ณ ์๊ฐํ๋ ์ธ์ด์ ๋๋ค. ๊ทธ ๋ฐํ์ด ๋๋ ๋ฌธ๋ฒ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ต์ ๋(Optional)์ ๋๋ค. ์ฒ์ ์ต์ ๋์ ๋ดค์๋ ๋ค๋ฅธ ์ธ์ด์์๋ ์ฐพ์๋ณผ ์ ์๋ Swift๋ง์ ๋ ํนํ ๋ฌธ๋ฒ์ด๋ผ๊ณ ์๊ฐ ๋ค์์ต๋๋ค.
์ผ๋ง์ ์ต์ ๋์ ๋ฉํํ๋ ๋ฐฉ๋ฒ๊ณผ ์ด๋ฐ ๋ฉํํ๋ ๋ฐฉ์์ด ๊ท์ฐฎ์ ๋ฒ(?)๋ ํ๋ฐ ์ ์ต์ ๋์ ์ฌ์ฉํ๋์ง์ ๋ํ ์ง๋ฌธ์ ๋ฐ์์ต๋๋ค. ์ต์ ๋์ ์ต์ ๋์ด์ง ์ ์ฌ์ฉํ๋์ง ์๊ฐํด๋ณธ์ ์ด ์์ด์ nil๊ฐ์ผ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ง ์๋๋ค๋ผ๋ ์๋ฑํ ๋๋ต์ ํ๊ฒ ์ฐธ ์์ฝ๋๋ผ๊ตฌ์ ..(nil๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ค๋ฅธ ๊ฐ๋ค๊ณผ ๊ฐ์ด ๊ฐ์ ๊ฐ์ง๋ค๊ณ ํฉ๋๋ค ํํ) ๊ทธ๋ฌ๋ ์ค ์ต์ ๋์ ๋ํด ์ข์ ๊ธ์ ์ฝ๊ฒ ๋์ด ๋ฉด์ ๋ ๋ง์ ๋ชปํ ์๊ฐ๊ณผ ๊ทธ ๋๋ต์ ๋ค์ ํด๋ณด๊ณ ์ ํฉ๋๋ค !!
Optional์ด๋ ?
๊ฐ์ด ์์์๋ ์์์๋(nil)์์์ ๋ํ๋ ๋๋ค.
์๋์ ๊ฐ์ด ํ์ ์ "?" ๊ธฐํธ๋ฅผ ๋ถ์ฌ ์ฌ์ฉํฉ๋๋ค.
var a: Int?
func b() -> String? { }
var arr: [Double?]
ํ์ ์ ์ ์ธํ ๋๋ ์ฌ์ฉ๋๊ณ , ํ์ ์บ์คํ ์ ํ ๋๋ ๋ฐํ๊ฐ์ผ๋ก ์ต์ ๋์ ๊ฐ์ง๋๋ค.
var a = 123
var str = Int(a) // Int? ํ์
์ฆ ์ต์ ๋์ ์ฌ์ฉํจ์ผ๋ก์ ๊ฐ์ด ์์ ์๋ ์์์ ์๋ ค์ฃผ๋ฉฐ ์ด๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ๊ฐ์ด ์์์ ๋ณด์ฅํ์ฑ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํฉ๋๋ค. ์ต์ ๋์ ๋ฐ์ธ๋ฉํ๋ ๋ฐฉ์์๋ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
Forced Unwrapping
๋ง ๊ทธ๋๋ก ๊ฐ์ ๋ก ๊ฐ์ ์ถ์ถํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋์ ๊ฐ์ด ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์๊ด์ด ์์ง๋ง ๊ฐ์ด nil์ผ๊ฒฝ์ฐ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
var str: String? = “Hello”
print(str!)
Optional Binding - if let
Optional ํ์ ์ผ๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ด ์๋์ง ์๋์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
if let์ ํตํด ์ต์ ๋ ๋ณ์๊ฐ nil๊ฐ์ ๊ฐ์ง๊ณ ์๋์ง ์๋์ง ๊ฒ์ฌํ๋ค ํด๋น ๊ดํธ ์์์ ์์ ํ๊ฒ ์ธ๋ํํ์ฌ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
var str: String? = "Hello"
if let str = str { // ์ํ
}
Optional Binding - guard let else
๋ ๋ค๋ฅธ ๋ฐฉ์์ guard let์ ์ฌ์ฉ ํ๋ ๊ฒ์ ๋๋ค. else ๊ตฌ๋ฌธ์ ์ต์ ๋ ๋ณ์ str์ด nil์ผ ๊ฒฝ์ฐ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
var str: String? = "Hello"
guard let str = str else {
//nil์ผ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
}
๊ทธ๋ ๋ค๋ฉด ์ต์ ๋์ ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น์ ? ๋ชจ๋ญ ํ์ ์ ์ต์ ๋์ด ์๋ ํ์ ์ผ๋ก ์ ์ธํ๋ฉด ์๋๋ ๊ฒ์ผ๊น์ ? ์ฒ์์ ์ด์ ํด๋ต์ ์ฐพ์ง ๋ชปํ๋ค๊ฐ ์ข์ ๊ธ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.
์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ view์ ๋ฟ๋ ค์ฃผ๋ ์์ ์ ํ ์, ์ต์ ๋ ๋ณ์๋ก ์ ์ธ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ๋ ๋คํธ์ํน ์์ ์ผ๋ก ๋น๋๊ธฐ์ฒ๋ฆฌ ํ๊ฒ ๋๋ค๋ฉด ์ฒ์์ nil๊ฐ์ ๊ฐ์ง๋ฉฐ ๋ก๋ฉ์ด ๋ ๊ฒ์ ๋๋ค. ์์ง ๊ฐ์ด ์๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด nil ๊ฐ์ ๊ฐ์ง๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ฐ์์ค๋ ์ค์์ ๊ตฌ๋ณํ์ฌ ์ฌ์ฉ ํ ์ ์๋ค๋ ์ ์์ ์ ์ฉํ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๊ฐ์ด nil์ผ๋ ์ฒ๋ฆฌํด์ผ ํ ์์ ์ ๋ถ๊ธฐํด์ ์๊ฐํ ์ ์๋ค๋ ์ ์์ ์ ๋ง ์์ ์ฑ์ ์ค์์ ํ๋ ์ธ์ด๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค.
์ต์ ๋ ํ์ ์ if, guard๋ฅผ ์จ์ ๋ฐ์ธ๋ฉ ํ๋ ๋์ ์ต์ ๋ ์ฒด์ด๋์ ํ์ฉํ๋ ๋ฐฉ์๋ ์์ต๋๋ค. ์ด์ ๋ํ ์ค๋ช ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
https://jusung.gitbook.io/the-swift-language-guide/language-guide/16-optional-chaining
์ต์ ๋ ์ฒด์ด๋์ ๋ฐ์ธ๋ฉ ์์ ์ ํ์ง ์๊ณ ์ต์ ๋ ํ์ ์ ๋ํ๋ด๋ ?๋ฅผ ๊ทธ๋๋ก ์จ์ ๊ฐ ์์ฑ์ ์ ๊ทผํฉ๋๋ค. ๊ธฐ์กด ๋ฐ์ธ๋ฉ๋ณด๋ค ์ ๊ทผํ ๋ ?๋ฅผ ๋ถ์ด๋ฉด ๋๋ฏ๋ก ๊ฐ๊ฒฐํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
'IOS๐ > iOS+Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] split, components ์ฐจ์ด (with: ์ฑ๋ฅ) (0) | 2022.04.14 |
---|---|
[Swift] Opaque Type์ด๋ (0) | 2022.04.12 |
[iOS] Swift Unit Test ์ดํด๋ณด๊ธฐ (0) | 2022.04.07 |
[Swift] Access Control (open, public, internal, fileprivate, private) (0) | 2022.03.29 |
[Swift] CustomStringConvertible (0) | 2022.03.07 |
๋๊ธ