- ์ต์ ๋์ด๋??
- ๊ฐ์ด ์์ ์๋, ์์ ์๋ ์์์ ํํ
- nil์ด ํ ๋น ๋ ์ ์๋์ง ์๋์ง ํํ
// someOptionalParm์ nil์ด ํ ๋น ๋ ์ ์๋ค.
func someFunction(someOptionalParam: Int?) {
// ....
}
/// someOptionalParm์ nil์ด ํ ๋น ๋ ์ ์๋ค.
func someFunction(someOptionalParam: Int) {
// ....
}
someFunction(someOptionalParam: nil)
// someFunction(someParam: nil)
- ์ต์ ๋์ ์ฐ๋ ์ด์
- ๋ช ์์ ํํ
1. nil์ ๊ฐ๋ฅ์ฑ์ ์ฝ๋๋ง์ผ๋ก ํํ๊ฐ๋ฅ
2. ๋ฌธ์/์ฃผ์ ์์ฑ ์๊ฐ ์ ์ฝ
- ์์ ํ ์ฌ์ฉ
1. ์ ๋ฌ๋ฐ์ ๊ฐ์ด ์ต์
๋์ด ์๋๋ผ๋ฉด nil ์ฒดํฌ๋ฅผ ํ์ง ์๊ณ ์ฌ์ฉ๊ฐ๋ฅ
2. ์์ธ ์ํฉ์ ์ต์ํ ํ๋ ์์ ํ ์ฝ๋ฉ
3. ํจ์จ์ ์ฝ๋ฉ
- ์ต์ ๋ ๋ฌธ๋ฒ๊ณผ ์ ์ธ
- ์ต์ ๋ ๋ฌธ๋ฒ = enum + generics
- ์ต์ ๋ ์ ์ธ
enum Optional<Wrapped>: ExpressibleByNiliteral {
case none
case some(Wrapped)
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? =nil
- ์ต์ ๋ ํํ
1. ๋๋ํ(!)๋ฅผ ์ด์ฉํ ์์์ ์ถ์ถ ์ต์ ๋
// Implicitly Unwrapped Optional
var implicitlyUnwrappedOptionalValue: Int! = 100
switch implicitlyUnwrappedOptionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// ๊ธฐ์กด ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// nil ํ ๋น ๊ฐ๋ฅ
implicitlyUnwrappedOptionalValue = nil
// ์๋ชป๋ ์ ๊ทผ์ผ๋ก ์ธํ ๋ฐํ์ ์ค๋ฅ ๋ฐ์
//implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
2. ๋ฌผ์ํ(?)๋ฅผ ์ด์ฉํ ์ต์ ๋
// Optional
var optionalValue: Int? = 100
switch optionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// nil ํ ๋น ๊ฐ๋ฅ
optionalValue = nil
// ๊ธฐ์กด ๋ณ์์ฒ๋ผ ์ฌ์ฉ๋ถ๊ฐ - ์ต์
๋๊ณผ ์ผ๋ฐ ๊ฐ์ ๋ค๋ฅธ ํ์
์ด๋ฏ๋ก ์ฐ์ฐ๋ถ๊ฐ
//optionalValue = optionalValue + 1