2022. 6. 12. 19:06ใios
Swift - if let ์กฐ๊ฑด๋ฌธ
swift์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ์กฐ๊ฑด๋ฌธ์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
์กฐ๊ฑด๋ฌธ์ ์๊ธฐ ์ ์ swift์์ ์ฌ์ฉํ๋ optional์ ๋ํด์ ๋จผ์ ์์๋ด ์๋ค.
Optional
optional value๋ ๊ฐ์ด ์กด์ฌํ์ง ์์ ๋๋ฅผ ๋๋นํ์ฌ ์์ ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ์ํด ๋ง๋ค์ด์ง ๊ธฐ๋ฅ์ ๋๋ค. ์๋ ์์๋ฅผ ํตํด ์กฐ๊ธ ๋ ์ง๊ด์ ์ผ๋ก ๋๊ปด๋ด ์๋ค.
์ฌ์ฉ์๊ฐ ํ์ด์ง์ ๋ก๊ทธ์ธํ๊ณ ์ ์ํ์ ๋ ๋๋ค์์ด ์กด์ฌํ๋ค๋ฉด ๋๋ค์์, ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ฌ์ฉ์์ ์ด๋ฆ์ ๋ ธ์ถ์ํจ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ์ด์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
let nickname: String?= "jimin" //์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด ์๊ณผ ๊ฐ์ด String์ด ์๋ nil๊ฐ์ด ๋ค์ด์ฌ ์๋ ์๊ธฐ ๋๋ฌธ์ ?๋ฅผ ๋ถ์ฌ ์ ์
if nickname != nil {
print("your name is \(nickname)") //output: your name is Optional("jimin")
} else {
print("nil")
}
๋ง์ฝ ์์ ์ฝ๋์์ ์ต์ ๋ ๊ธฐํธ์ธ ?๋ฅผ ์ ์ธํ๋ค๋ฉด ์ด๋ป๊ฒ ๋์์๊น์?
์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค๋ฉด ์ ์๋ํ๊ฒ ์ง๋ง ๊ฐ์ด ์์ ๋๋ Crash๋ฅผ ๋ด์ ์ฑ์ด ์ค๋จ๋ ๊ฒ๋๋ค.
์ด๋ ์ฑ์ด ์ ์ฐํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋จ์ด์ง๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ Optional์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ์ด ์กด์ฌํ์ง ์์ ๋๋ nil์ ๋์ ธ ๊ทธ์ ๋ํ ์ผ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ์ด Crash๋๋ ๊ฒ์ ๋ง์ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๊ฒ์ด Optional์ ์ฌ์ฉํ๋ ์ด์ ์ ๋๋ค.
์์ ์์์์ ๊ณ ์ณ์ผํ ๋ถ๋ถ์ด ํ๋ ๋ ์กด์ฌํฉ๋๋ค. output๋ถ๋ถ์ ๋ณด๋ฉด ์์คํ ๋ฐ์, Jimin์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด ์๋๋ผ Optional("Jimin")์ด ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ nickname์ String? = ์ ์ฌ์ฉํ์ฌ ์ ์ํจ์ผ๋ก์จ ์ต์ ๋๋ก wrapping๋ ๊ฐ์ ๊ฐ๊ฒ ํด์ฃผ์์ต๋๋ค. ์์ํ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ด๋ฅผ unwrapping์ ํ ๋ค์ ์ถ๋ ฅ์ ํด์ฃผ์ด์ผํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ๋ ๊ฐ์ unwrapํ๋ ๋ฐฉ๋ฒ์ !์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. '
let name: String?= "jerry"
print(name) //output: Optional("jerry")
print(name!) //output: jerry
ํ์ง๋ง !์ ์ฌ์ฉํ์ฌ unwrapํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ด ์์ ๋(nil์ผ ๋) ๋ฐํ์์์ ์๋ฌ๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค. ์ด๋ ์น๋ช ์ ์ธ ๋จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์์ ์์๋ฅผ ๋ณด์ํ ๋ฐฉ๋ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ดํด ๋ณผ ๋ฉ์ธ ์ฃผ์ ์ธ if let ๋ฌธ๋ฒ์ ๋๋ค.
if let
if let์ ํ๋ฒํ if์๋ ๋ค๋ฅด๊ฒ !์ ์ฌ์ฉํ์ฌ unwrapํ์ง ์์๋ ์๋์ผ๋ก unwrapping๋ ๊ฐ์ ๊ฐ์ง ์ ์๊ฒํ๊ณ , ๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์ nil์ธ ๊ฒฝ์ฐ, ๋ ๊ฐ์ง ์ผ์ด์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ ์ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ฆ if let ๊ตฌ๋ฌธ์ ํ ์ค์์ "nil์ฒดํฌ", "unwrapping" ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ํ ์ ์์ต๋๋ค. ์๋ ์์๋ฅผ ํตํด ์กฐ๊ธ ๋ ์ง๊ด์ ์ผ๋ก ์ดํดํด๋ด ์๋ค.
let optionalName: String? = "jinsu"
if let name = optionalName {
print("Hello, \(name)");
} else {
print("nil, \(optionalName2)");
}
์ ํจ์์ ๋งค์ปค๋์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. optionalName์ ๋ํด nil์ฒดํฌ๋ฅผ ํฉ๋๋ค.
2. ๊ฐ์ด ์กด์ฌํ๋ค๋ฉด ๋ก์ปฌ๋ณ์ name์ unwrapping๋ ๊ฐ์ธ jinsu๊ฐ ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค.
3. printํจ์๊ฐ ์คํ๋์ด Hello, Jinsu๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
์ ์ํด์ผ ํ ์ฌํญ์ ์์ฑ๋ ๋ก์ปฌ๋ณ์ name์ if๋ฌธ ๋ฐ์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๋๋ค. ์ฆ unwrapping๋ ์์์ธ name์ if๋ฌธ ์์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
'ios' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
swift - ์ฑ๊ธํค ํจํด (0) | 2022.07.05 |
---|---|
Swift - ์ด๊ฑฐํ(enum), ์์๊ฐ, ์ฐ๊ด๊ฐ (0) | 2022.06.30 |
Swift- inout (0) | 2022.06.28 |
Swift - ํจ์ (0) | 2022.06.27 |
Swift - let, var, array, dictionary (0) | 2022.06.12 |