๐ 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 |
๋๊ธ