์ต์ ๋
์ต์ ๋ = '์ ํ์ ์ธ'. ์ฆ, ๊ฐ์ด ์์์๋ ์์์๋ ์์์ ๋ํ๋ด๋ ํํ
์ด๋ '๋ณ์๋ ์์ ๋ฑ์ ๊ผญ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค. ์ฆ, ๋ณ์ ๋๋ ์์์ ๊ฐ์ด nil ์ผ ์๋ ์๋ค'๋ ๊ฒ
nil์ ๋ฐํํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด ๋ฐ๋ก ์ต์ ๋
์ค์ง ์ต์ ๋ ํ์ ๋ง nil์ ๋ฐํํ ์ ์๋ค. ์ฆ, ์ผ๋ฐ ์๋ฃํ์ nil์ ๊ฐ์ง๊ฑฐ๋ ๋ฐํํ ์ ์๋ค.
์ต์ ๋ ์ฌ์ฉ
์ต์ ๋ ๋ณ์ ๋๋ ์์๊ฐ ์๋๋ฉด nil ํ ๋น ๋ถ๊ฐ
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ nil ํ ๋น
var myName: String = "yagom"
myName = nil // ์ค๋ฅ
nil์ ์ต์ ๋๋ก ์ ์ธ๋ ๊ณณ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
์ต์ ๋ ๋ณ์ ๋๋ ์์ ๋ฑ์ ๋ฐ์ดํฐ ํ์ ๋ค์ ๋ฌผ์ํ ? ๋ฅผ ๋ถ์ฌ ํํํด์ค๋ค.
์ ์์ ์ธ nil ํ ๋น
var myName: String? = "yagom"
print(myName) // yagom
myName = nil
print(myName) // nil
์ต์ ๋์ ์ด๋ค ์ํฉ์ ์ฌ์ฉ ?
1. ์ ๊ตณ์ด ๋ณ์์ nil์ด ์์์ ๊ฐ์ ํด์ผ ํ ๊น ?
์๋ฅผ๋ค์ด ์ฐ๋ฆฌ๊ฐ ๋ง๋ ํจ์์ ์ ๋ฌ๋๋ ์ ๋ฌ์ธ์์ ๊ฐ์ด ์๋ชป๋ ๊ฐ์ผ ๊ฒฝ์ฐ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ์์ nil ์ ๋ฐํํ์ฌ ํํํ๋ ๊ฒ
๋ฌผ๋ก ๊ธฐ๋ฅ์ ์ฌ๊ฐํ ์ค๋ฅ๋ผ๋ฉด ๋ณ๋๋ก ์ฒ๋ฆฌํด์ผ๊ฒ ์ง๋ง, ๊ฐ๋จํ nil์ ๋ฐํํด์ ์๋ฆด ์๋ ์๋ค.
2. ๋งค๊ฐ๋ณ์๋ฅผ ๊ตณ์ด ๋๊ธฐ์ง ์์๋ ๋๋ค๋ ๋ป = ๋งค๊ฐ๋ณ์์ ํ์ ์ ์ต์ ๋๋ก
๋งค๊ฐ๋ณ์๊ฐ ์ต์ ๋์ผ๋๋ '์, ์ด ๋งค๊ฐ๋ณ์์๋ ๊ฐ์ด ์์ด๋ ๋๋๊ตฌ๋'๋ผ๊ณ ์๊ฐํด์ผ ํ๋ค.
์์ ๊ฐ์ ํตํ ์ด๊ฑฐํ ์ด๊ธฐํ
let primary = School(rawValue: "์ ์น์") // primary
let graduate = School(rawValue: "์๋ฐ์ฌ") // nil
let one = Numbers(rawValue: 1) // one
let three = Numbers(rawValue : 3) // nil
์๋๋ ๋ณ์๋ ์์ ๋ค์ ๋ฐ์ดํฐ ํ์ ์ ๋ช ์ํ์ง๋ง, ์ด ์์ ์์๋ ๋ช ์ํด์ฃผ์ง ์๊ณ ์ถ๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํ์๋ค
> nil ์ ํ ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ด๋ค. ์ปดํ์ผ๋ฌ๋ ์๋ง๋ primary ๋ฐ graduate ์์์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง๊ณ School? ์ด๋ผ๊ณ ์ถ๋ก ํ์๊ฒ์ด๋ค. ๋, one๊ณผ three ์์์ ๋ฐ์ดํฐ ํ์ ์ Numbers?๋ผ๊ณ ์ถ๋ก ํ์๊ฒ์ด๋ค. ์ด๋ ์์ ๊ฐ์ด ์ด๊ฑฐํ์ case์ ํด๋นํ์ง ์์ผ๋ฉด ์ด๊ฑฐํ ์ธ์คํด์ค ์์ฑ์ ์คํจํ์ฌ nil์ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
๐ก ์ต์ ๋ ์ด๊ฑฐํ์ ์ ์
์ต์ ๋ = ์ด๊ฑฐํ์ผ๋ก ๊ตฌํ๋์ด์ง
// ์ ๋ค๋ฆญ์ด ์ ์ฉ๋ ์ด๊ฑฐํ์ ๋ชจ์ต
public enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
public init(_ some: Wrapper)
// ์ค๋ต ..
}
์ต์ ๋์ด ๊ฐ์ ๊ฐ๋ ์ผ์ด์ค์ ๊ทธ๋ ์ง ๋ชปํ ์ผ์ด์ค 2๊ฐ์ง๋ก ์ ์ ๋๋ค.
์ฆ, nil์ผ๋๋ none์ผ์ด์ค๊ฐ ๋ ๊ฒ์ด๊ณ , ๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ some ์ผ์ด์ค๊ฐ ๋๋๋ฐ, ์ฐ๊ด ๊ฐ์ผ๋ก Wrapped๊ฐ ์๋ค.
๋ฐ๋ผ์ ์ต์ ๋์ ๊ฐ์ด ์์ผ๋ฉด some์ ์ฐ๊ด ๊ฐ์ธ Wrapped์ ๊ฐ์ด ํ ๋น๋๋ค. ์ฆ, ๊ฐ์ด ์ต์ ๋์ด๋ผ๋ ์ด๊ฑฐํ์ ๋ฐฉํจ๋ง์
๋ณดํธ๋์ด ๋ํ๋์ด ์๋ ๋ชจ์ต์ด๋ผ๊ณ ํ ์ ์๋ค.
์ต์ ๋ ์ถ์ถ
์ด๊ฑฐํ์ some ์ผ์ด์ค๋ก ๊ผญ๊ผญ ์จ์ด์๋ ์ต์ ๋์ ๊ฐ์ ์ต์ ๋์ด ์๋ ๊ฐ์ผ๋ก ์ถ์ถํ๋ ๋ฐฉ๋ฒ
1. ๊ฐ์ ์ถ์ถ
์ต์ ๋ ๊ฐ์ ์ถ์ถ ๋ฐฉ์์ ์ต์ ๋์ ๊ฐ์ ์ถ์ถํ๋ ๊ฐ์ฅ ๊ฐ๋จํ์ง๋ง ๊ฐ์ฅ ์ํํ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐํ์ ์ค๋ฅ๊ฐ ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ์ ์ถ์ถ์ ํ๋ ค๋ฉด, ์ต์ ๋ ๊ฐ์ ๋ค์ ๋๋ํ ! ๋ฅผ ๋ถ์ฌ ๊ฐ์ ๋ก ์ถ์ถํ์ฌ ๋ฐํํด์ค๋ค.
๋ง์ฝ ๊ฐ์ ์ถ์ถ์ ์ต์ ๋์ ๊ฐ์ด ์๋ค๋ฉด, ์ฆ nil ์ด๋ผ๋ฉด ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
var myName: String? = "yagom"
// ์ต์
๋์ด ์๋ ๋ณ์์๋ ์ต์
๋ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ค. ์ถ์ถํด์ ํ ๋นํด์ฃผ์ด์ผ ํ๋ค.
var yagom: String = myName!
myName = nil
yagom = myName! // ๋ฐํ์ ์ค๋ฅ
// if ๊ตฌ๋ฌธ ๋ฑ ์กฐ๊ฑด๋ฌธ์ ์ด์ฉํด์ ์กฐ๊ธ ๋ ์์ ํ๊ฒ ์ฒ๋ฆฌํด๋ณผ ์ ์๋ค.
if myName != nil {
print("My name is\(myName!)")
} else {
print("My name == nil")
}
// myName == nil
์ต์ ๋ ๊ฐ์ ์ถ์ถ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์ํด์ผ ํจ
2. ์ต์ ๋ ๋ฐ์ธ๋ฉ
์ต์ ๋์ ๊ฐ์ด ์๋์ง ํ์ธํ ๋ ์ฌ์ฉ
๋ง์ฝ ์ต์ ๋์ ๊ฐ์ด ์๋ค๋ฉด ์ต์ ๋์์ ์ถ์ถํ ๊ฐ์ ์ผ์ ๋ธ๋ก์์์ ์ฌ์ฉํ ์ ์๋ ์์๋ ๋ณ์๋ก ํ ๋นํด์ ์ต์ ๋์ด ์๋ ํํ๋ก
์ฌ์ฉํ ์ ์๋ค. if ๋๋ while ๊ตฌ๋ฌธ ๋ฑ๊ณผ ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
var myName: String? = "yagom"
// ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํตํ ์์ ์์ ํ ๋น
if let name = myName {
print("My name is \(name)")
} else {
print("my Name == nil")
}
// My name is yagom
// ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํตํ ์์ ๋ณ์ ํ ๋น
if var name = myName{
name = "wizplan" // ๋ณ์์ด๋ฏ๋ก ๋ด๋ถ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
print("My Name is\(name)")
} else {
print("myName == nil")
}
// My name is wizplan
3. ์์์ ์ถ์ถ ์ต์ ๋
๋๋๋ก nil์ ํ ๋นํ๊ณ ์ถ์ง๋ง, ์ต์ ๋ ๋ฐ์ธ๋ฉ์ผ๋ก ๋งค๋ฒ ๊ฐ์ ์ถ์ถํ๊ธฐ ๊ท์ฐฎ๊ฑฐ๋ ๋ก์ง์ nil ๋๋ฌธ์ ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ ๊ฒ ๊ฐ๋ค๋ ํ์ ์ด ๋ค๋ nil ์ ํ ๋นํด ์ค ์ ์๋ ์ต์ ๋์ด ์๋ ๋ณ์๋ ์์๊ฐ ์์ผ๋ฉด ์ข์ ๋ ์ฌ์ฉ.
์ต์ ๋์ ํ์ํ๊ณ ์ ํ์ ๋ค์ ๋ฌผ์ํ ? ๋ฅผ ์ฌ์ฉํ์ง๋ง, ์์์ ์ถ์ถ ์ต์ ๋์ ์ฌ์ฉํ๋ ค๋ฉด ํ์ ๋ค์ ๋๋ํ ! ๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
var myName: String! = "yagom"
print(myName) // yagom
myName = nil
// ์์์ ์ถ์ถ ์ต์
๋๋ ์ต์
๋์ด๋ฏ๋ก ๋น์ฐํ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ ์ ์๋ค.
if let name = myName{
print("My name is \(name)")
} else {
print("My Name == nil")
}
// myName == nil
myName.isEmpty // ์ค๋ฅ !!
์ต์ ๋์ ์ฌ์ฉํ ๋๋ ๊ฐ์ ์ถ์ถ ๋๋ ์์์ ์ถ์ถ ์ต์ ๋์ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋
์ต์ ๋ ๋ฐ์ธ๋ฉ, nil ๋ณํฉ ์ฐ์ฐ์๋ฅผ ๋น๋กฏํด ๋ค์์ ๋ฐฐ์ธ ์ต์ ๋ ์ฒด์ด๋ ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์์ ํ๋ค.
์์ฝ
์ต์ ๋ : ๊ฐ์ด ์์์๋์๊ณ , ์์์๋ ์๋ ์ ํ์ ์ธ ๊ฒ
- ์ต์ ๋ ๋ณ์/์์๋ง ์ต์ ๋ ํ ๋น์ด ๊ฐ๋ฅํ๋ค
- ๋ง์ฝ API์ฌ์ฉ์ ๋งค๊ฐ๋ณ์๊ฐ ์ต์ ๋์ผ๋๋ '๋งค๊ฐ๋ณ์์๋ ๊ฐ์ด ์์ด๋ ๋๋๊ตฌ๋' ์๊ฐํ๋ฉด ๋๋ค.
์ต์ ๋ ์ถ์ถ
1) ์ต์ ๋ ๋ฐ์ธ๋ฉ : nil ์ฒดํฌ + ์์ ํ ๊ฐ ์ถ์ถ
-> if๋ฌธ์ ํ์ฉํ์ฌ ์ต์ ๋์ ํ ๋น๋ ๊ฐ์ ์์๋ณ์/์์์ ํ ๋นํ๋ ๋ฐฉ์
2) ๊ฐ์ ์ถ์ถ : ! ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ถ์ถํ ์ ์์ง๋ง, ์ง์ํ๋ ๋ฐฉ์
'๐ iOS > ๊ธฐ์ด๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift ๊ธฐ์ด] ํ๋กํผํฐ์ ๋ฉ์๋ (0) | 2023.01.10 |
---|---|
[Swift ๊ธฐ์ด] ๊ตฌ์กฐ์ฒด์ ํด๋์ค (0) | 2023.01.05 |
[Swift ๊ธฐ์ด] ํจ์ (0) | 2023.01.01 |
[Swift ๊ธฐ์ด] ํ๋ฆ์ ์ด (0) | 2022.12.31 |
[Swift ๊ธฐ์ด] ์ฐ์ฐ์ (0) | 2022.12.30 |