Swfit-04 Optional
Optional
- ๊ฐ์ด ์์ ์๋, ์์ ์๋ ์์
- nil ํ ๋น ๊ฐ๋ฅ
- ๊ธฐ๋ณธ ๋ณ์์ฒ๋ผ ์ฌ์ฉ๋ถ๊ฐ : ์ต์
๋๊ณผ ์ผ๋ฐ ๊ฐ์ ๋ค๋ฅธ ํ์
์ด๋ฏ๋ก ์ฐ์ฐ๋ถ๊ฐ
- Optional ์ข ๋ฅ : ? (Optional), ! (Implicitly Unwrapped Optional)
Optional์ด ํ์ํ ์ด์
- nil์ ๊ฐ๋ฅ์ฑ์ ์ฝ๋์์์ ๋ช
์์ ์ผ๋ก ํํ
- ์ต์
๋์ด ์๋ ์์์๋ nil ํ ๋น ๋ถ๊ฐ๋ฅ -> ์ ๋ฌ๋ฐ์ ๊ฐ์ด ์ต์
๋์ด ์๋๋ผ๋ฉด nil์ฒดํฌ๋ฅผ ํ์ง ์๋๋ผ๋ ์์ฌํ๊ณ ์ฌ์ฉ -> ์์ธ ์ํฉ์ ์ต์ํํ๋ ์์ ํ ์ฝ๋ฉ
// someOptionalParm์ nil์ด ํ ๋น ๋ ์ ์๋ค.
func someFunction(someOptionalParam: Int?) {
// ....
}
// someParm์ nil์ด ํ ๋น ๋ ์ ์๋ค.
func someFunction(someParam: Int) {
// ....
}
someFunction(someOptionalParam: nil)
// someFunction(someParam: nil) : ERROR !!
! : Implicitly Unwrapped Optional
- nil ํ ๋น ๊ฐ๋ฅ
- ๊ธฐ์กด ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋ชป๋ ์ ๊ทผ์ผ๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ ๋ฐ์
var iuoVal1: Int! = 100
var iuoVal2: Int! = nil // nil ํ ๋น ๊ฐ๋ฅ
iuoVal1 = iuoVal1 + 1 // ๊ธฐ์กด ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
iuoVal2 = iuoVal2 + 1 // ERROR! : ์๋ชป๋ ์ ๊ทผ์ผ๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ ๋ฐ์
? : Optional
- nil ํ ๋น ๊ฐ๋ฅ
- ๊ธฐ๋ณธ ๋ณ์์ฒ๋ผ ์ฌ์ฉ๋ถ๊ฐ : ์ต์
๋๊ณผ ์ผ๋ฐ ๊ฐ์ ๋ค๋ฅธ ํ์
์ด๋ฏ๋ก ์ฐ์ฐ๋ถ๊ฐ
var optVal1: Int? = 100
var optVal2: Int? = nil // nil ํ ๋น ๊ฐ๋ฅ
optVal1 = optVal1 + 1 // ERROR! : ๊ธฐ์กด ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
optVal2 = optVal2 + 1 // ERROR! : ์๋ชป๋ ์ ๊ทผ์ผ๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ ๋ฐ์
Optional ์ถ์ถ
- ์ต์
๋์ ๋ค์ด์๋ ๊ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด ๊บผ๋ด์ค๋ ๊ฒ
- ์ถ์ถ๋ฐฉ์ : Optional Binding, Force Unwrapping
Optional Binding
- nil ์ฒดํฌ + ์์ ํ ๊ฐ ์ถ์ถ
- ์ต์
๋ ์์ ๊ฐ์ด ๋ค์ด์๋์ง ํ์ธํ๊ณ ๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ๊บผ๋ด์ด
- if let ํค์๋ : if-let์ ์ต์
๋ ํ์
์ ๊ฐ์ ์์ ํ๊ฒ ์ถ์ถํ๊ธฐ ์ํด ์ฌ์ฉ
Force Unwrapping
- ์ต์ ๋๋ณ์ ๋ค์ "!" ๋ฅผ ๋ถ์ด๋ฉด ๊ฐ์ ๋ก Optional wrap์ ๋ฒ๊ธฐ๊ณ ๊ฐ์ ๊ฐ์ ธ์จ๋ค
- ๋ง์ฝ ๊ฐ์ด ์์๊ฒฝ์ฐ(nil) ๋ฐํ์ ์ค๋ฅ๊ฐ ๋ฐ์