๐ Optional Binding
๋ณ์์ ๊ฐ์ด ์ ์ฅ๋ ์ง ์๋์ง๋ฅผ ํ์คํ ์ ์์ ๋ Optional์ ์ฌ์ฉํ๋ค.
Optional Binding์ Optional ํ์
์ ๋ณ์๊ฐ์ ๊บผ๋ด์ค๋ ๋ฐฉ๋ฒ์ค ํ๋์ด๋ค.
๐ถ guard
guard๋ฅผ ์ฌ์ฉํ ์ต์
๋ ๋ฐ์ธ๋ฉ์ ์์๋ณด๊ธฐ์ guard๋ถํฐ ์์๋ณด๊ฒ ๋ค.
guard ๋ค์ ๋ฐ๋ผ๋ถ๋ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๊ฐ True์ผ ๋ guard๋ฌธ ๋ฐ์ ์ฝ๋๊ฐ ์คํ๋๋ค.
False๋ผ๋ฉด else๋ธ๋ก ๋ด๋ถ ์ฝ๋๋ง ์คํ๋๋ค.
์ด ๋ด๋ถ ์ฝ๋์๋ ์์ ๋ณด๋ค ์์์ ์ฝ๋๋ธ๋ก์ ์ข ๋ฃํ๋ ์ฝ๋๊ฐ ๋ฐ๋์ ๋ค์ด๊ฐ์ผํ๋ค.
Ex) return, break, continue, throw
๐ฑ guard let
guard let์ ์์ธ์ฌํญ์ ์ฒ๋ฆฌํ ๋ ์ฃผ๋ก ์ฐ์ธ๋ค.
์ต์ ๋์ ๋ฒ๊ฒผ์ ๋ ๊ฐ์ด nil์ด๋ฉด ๋์ด์ ์ฝ๋๋ฅผ ์คํ์ํค์ง ์๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ๊ฐํ๋ค.
- nil์ผ๋๋ง ๊ด์ฌ์ ๊ฐ์ง (์์ธ(์ฌ๊ธฐ์ nil) ์ฒ๋ฆฌ)
func twice(price: Int?) {
guard let price = price else { return }
print(2 * price)
}
์์ ๊ฐ์ด guard let์ ๊ฐ์ด nil์ธ์ง ์๋์ง๋ฅผ ์ฒดํฌํ์ฌ ๊ฐ์ด nil์ด๋ฉด ์ฝ๋ ์คํ์ ์ค์ง์ํจ๋ค.
๋ง์ฝ ๊ฐ์ด nil์ด๋ฉด else๋ฅผ ํ์ return์ ์ฌ์ฉํ์ฌ ์คํ์ ์ค์ง์ํค๊ณ , ๊ฐ์ด ์กด์ฌํ๋ค๋ฉด else๋ฅผ ํ์ง์๊ณ ๋ฐ์ ์ฝ๋๋ฅผ ์ ์์ ์ผ๋ก ์คํํ๋ ๊ฒ์ด๋ค.
๐ญ if let
if let์ ๊ฐ์ด nil์ผ ๋์ nil์ด ์๋ ๋๋ฅผ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์ ํด์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
๊ฐ์ ์ ๋ฌด์ ๋ฐ๋ผ ๊ฐ๊ฐ ์ํฉ์ State๋ฅผ ์ฃผ๊ณ ์ถ๋ค๋ ์๋ฏธ๊ฐ ๊ฐํ๋ค.
- nil์ผ๋์ nil์ด ์๋๋, ๋ ์ํฉ ๋ค ๊ด์ฌ์ ๊ฐ์ง
func twice(price: Int?) {
if let price = price {
print(2 * price)
}
else {
print("Error")
}
}
์ํฉ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ฃผ๋ ๋ชจ์ต์ด๋ค.
๐น guard let๊ณผ if let์ ์ฐจ์ด
guard let ์ผ๋ก ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํ ๊ฒฝ์ฐ, ๋ฐ์ธ๋ฉ๋ ์์๋ฅผ guard ๊ตฌ๋ฌธ ์คํ์ฝ๋ ์๋๋ถํฐ ํจ์ ๋ด๋ถ์ ์ง์ญ์์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๋ฐ๋ฉด if let์ผ๋ก ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํ ๊ฒฝ์ฐ, ๋ฐ์ธ๋ฉ๋ ์์๋ ๊ทธ ๋ธ๋ญ์์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.

์ ์ฌ์ง์ if let ์ฝ๋ ๋ธ๋ญ ์ธ๋ถ์์ test1 ์์๋ฅผ ์ฐพ์ ์ ์๋ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค
// if let๋ก ์ต์
๋ ๋ฐ์ธ๋ฉ ๋ ์์๋ ๊ทธ ๋ธ๋ญ ์์์๋ง ๋ณ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
func test1Function() {
if let test1 = productsList[0] {
print(test1) // Compile Error - Cannot find 'test1' in scope
}
print(test1)
}
// guard let๋ก ๋ฐ์ธ๋ฉ๋ ์์๋ฅผ guard ๊ตฌ๋ฌธ ์คํ ์ฝ๋ ์๋๋ถํฐ ํจ์ ๋ด๋ถ์ ์ง์ญ์์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
func test2Function() {
guard let test2 = productsList[1] else {
return
}
print(test2)
}
๊ฐ๋จํ๊ฒ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ ๋ํด ์์๋ณด์๋ค.
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Swift) Error Handling (0) | 2022.02.12 |
|---|---|
| ํจ์ ์ ๋ฌ์ธ์๋ช ๊ณผ ํ๋ผ๋ฏธํฐ๋ช (0) | 2022.02.12 |
| [Swift] Closure (0) | 2021.09.24 |
| [Swift] Functions (0) | 2021.09.23 |
| M1 error running pod install (0) | 2021.09.20 |
๋๊ธ