μ΄λ² κΈμ Optionalμ λν μ 리μ λλ€.
0. Optional ??
Optionalμ Swiftμμ λμ λ μλ‘μ΄ κ°λ μΌλ‘, μΈμ΄ μ°¨μμμ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄κΈ° μν΄ μ¬μ©λ©λλ€.
β‘οΈ μ²λ¦¬ κ³Όμ μμ λ¬Έμ κ° μμ κ²½μ° μ€λ₯λ₯Ό λ°μμν€κ³ μ€νμ μ€λ¨μν€λ λμ nil
μ λ°νν©λλ€.
β‘οΈ λ°λΌμ μ€λ₯κ° λ°μν κ°λ₯μ±μ΄ μλ€λ©΄ Optional νμ μΌλ‘ μ μν΄μΌ ν©λλ€.
nil
β
β‘οΈ "κ°μ΄ μμ" μ μλ―Ένλ νΉμν κ°
β‘οΈ μμνκ² μ무 κ²λ μλ€λ κ²μΌλ‘, λ€λ₯Έ μΈμ΄μμnull
λ‘ ννλκΈ°λ ν©λλ€.
β‘οΈ μ€ν¨λ₯Ό μλ―Ένλ©΄μλ μ€λ₯λ₯Ό λμ§λ κ²μ΄ μλ κ°
β‘οΈ μλ Objective-Cμμλ λΉ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°λ¦¬ν€λ κ°μ΄μμ΅λλ€.
nil
μ μ¬μ©ν μ μλ νμ
κ³Ό μ¬μ©ν μ μλ νμ
μ λλμμ λ, nil
μ μ¬μ©ν μ μλ νμ
μ΄ Optional νμ
μ
λλ€.
Optional νμ μ΄ κ°μ§ μ μλ κ°μ λ κ°μ§μ λλ€.
nil
μ΄ μλ κ°nil κ°
β‘οΈ μ²λ¦¬ κ³Όμ μμ λ¬Έμ κ° μμλ€λ©΄ nil
μ΄ λ°νλκ³ , λ¬Έμ κ° μμλ€λ©΄ Optional κ°μ²΄λ‘ κ°μΈμ§ κ²°κ³Όκ°μ΄ λ°νλ©λλ€.
β‘οΈ μ¦, μ€λ₯κ° λ°μν κ°λ₯μ±μ΄ μλ€λ©΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬νμ΄λ Optional νμ μΌλ‘ λ°νλ©λλ€.
β‘οΈ Optional(κ²°κ³Όκ°)
1. Optional νμ μ μΈ, μ μ
μΌλ° μλ£νμ Optional νμ
μΌλ‘ λ§λ€κΈ° μν΄μλ μλ£ν λ€μ ?
λ₯Ό λΆμ΄λ©΄ λ©λλ€.
Int?
String?
Double?
[String]?
Dictionary<String, String>?
AnyObject?
μΌλ° μλ£νμ μ μΈλ§ νκ³ μ΄κΈ°ννμ§ μμΌλ©΄ μ무κ²λ ν λΉλμ§ μμ§λ§,
Optional νμ μΌλ‘ μ μΈνλ©΄ μλμΌλ‘nil
λ‘ μ΄κΈ°νλ©λλ€.
Optional νμ μ λ³μμ κ°μ ν λΉν λλ κ·Έλ₯ μΌλ° λ³μμ²λΌ μκ°νκ³ ν λΉν΄μ£Όμ΄λ λ©λλ€.
Optional κ°μ²΄ λ΄λΆμ κ°μ΄ λμ λκΈ° λλ¬Έμ λλ€.
2. Optional κ° μ²λ¦¬
Optional νμ μ μ°μ°μ μ§μνμ§ μμ΅λλ€.
Optional νμ λΌλ¦¬λ, Optional νμ κ³Ό μΌλ° νμ μ¬μ΄μμλ λΆκ°λ₯ν©λλ€.
μ°μ°μ νκΈ° μν΄μλ κ²°κ³Όκ°μ λλ¬μΈκ³ μλ Optional κ°μ²΄λ₯Ό ν΄μ ν΄μΌ ν©λλ€.
μ΄λ₯Ό λ€λ₯Έ λ§λ‘ Optional Unwrappingμ΄λΌκ³ λΆλ₯΄κΈ°λ ν©λλ€.
Optional μ ν΄μ νκΈ° μν λ°©λ²μ μλμ κ°μ΄ λλμ΄μ§λλ€.
- λͺ
μμ ν΄μ
- κ°μ ν΄μ
- λΉκ°μ ν΄μ
- 묡μμ ν΄μ
- μ»΄νμΌλ¬μ μν ν΄μ
- ! μ°μ°μλ₯Ό μ¬μ©ν ν΄μ
첫 λ²μ§Έλ‘ λͺ
μμ ν΄μ μ κ°μ ν΄μ (Forced-Unwrapping)μ Optional νμ
λ€μ !
λ₯Ό λΆμ¬μ£Όλ©΄ λ©λλ€.
var opt: Int? = 3
print(opt!)
λν, κ°μ ν΄μ μ°μ°μ !
λ₯Ό μ¬μ©νλ©΄ Optional κ°μ²΄κ° ν΄μ λμ΄ μΌλ° νμ
μ΄ λλ―λ‘ μ°μ°μ΄ κ°λ₯ν΄μ§λλ€.
Int("1")! + Int("2")!
// κ²°κ³Ό : 3
Optional λ³μμ κ°μ΄ nil
μΌ λ κ°μ ν΄μ μ°μ°μ !
λ₯Ό μ¬μ©νλ©΄ μ€λ₯κ° λ°μν©λλ€.
κ·Έλμ Optional λ³μμ !
λ₯Ό μμ νκ² μ¬μ©νκΈ° μν΄μ λ¨Όμ Optional κ°μ΄ nil
μΈμ§ κ²μ¬ν΄μΌ ν©λλ€.
var str = "333"
var opt = Int(str)
if opt != nil {
print(opt!)
} else {
print("μ€ν¨")
}
λ λ²μ§Έλ‘ λΉκ°μ ν΄μ , Optional Bindingμ μ΄μ λΉμ·νκ² if ꡬ문 λ΄μμ 쑰건μ λμ μΌλ° μμμ Optional κ°μ λμ νλ λ°©μμ λλ€.
var str = "333"
if let opt = Int(str) {
print(opt)
} else {
print("μ€ν¨")
}
μΈ λ²μ§Έλ‘ μ»΄νμΌλ¬μ μν ν΄μ μ λλ€.
μμ κ°μ λ°©λ²μΌλ‘ λͺ μμ ν΄μ λ₯Ό νμ§ μμλ μ»΄νμΌλ¬μμ μλμΌλ‘ Optionalμ ν΄μ ν΄μ£Όλ κ²½μ°κ° μμ΅λλ€.
λ€μκ³Ό κ°μ΄ Optional κ°μ²΄μ κ°μ λΉκ΅ μ°μ°μλ₯Ό μ¬μ©νμ¬ λΉκ΅νλ κ²½μ°μ λλ€.
var opt = Int("333")
if opt == 333 {
print("333μ΄λ€.")
} else {
print("333μ΄ μλλ€.)
}
λΉκ΅ μ°μ°μλ‘ λΉκ΅νμ λ ν μͺ½μ΄ Optionalμ΄κ³ λ€λ₯Έ ν μͺ½μ΄ μΌλ° νμ μ΄λΌλ©΄ μ»΄νμΌλ¬κ° Optional νμ μ ν΄μ νκ³ λΉκ΅ μ°μ°μ μνν©λλ€.
λ§μ§λ§μΌλ‘ 묡μμ ν΄μ (Implicitly Unwrapped Optional)μ λλ€.
묡μμ ν΄μ λ Optional λ³μμ νμ μ μ μΈν λ 묡μμ ν΄μ λ₯Ό 미리 μ μΈν΄μ£Όμ΄μΌ ν©λλ€.
β‘οΈ λ³μ μ μΈ μμ ?
λμ !
λ₯Ό μ¬μ©ν΄μ£Όλ©΄ λ©λλ€.
var opt: Int! = Int("333")
print(opt)
λͺ¨λ κ²½μ°μ 묡μμ ν΄μ λ₯Ό μ¬μ©ν μ μλ κ²μ μλκ³ ,
μμ μ½λμ²λΌ Int()
κ° λ°ννλ κ°μ΄ Optionalμ΄κΈ° λλ¬Έμ λ³μλ₯Ό Optionalλ‘ μ μΈν΄μ£Όμ΄μΌ νμ§λ§
μ λ κ°μ΄ nil
μ΄ λ κ°λ₯μ±μ΄ μμ λ μ¬μ©ν©λλ€.
νμμ μΌλ‘ Optionalλ‘ μ μν΄μΌ νμ§λ§, κ°μ μ λ nil
μ΄ λ€μ΄κ° κ°λ₯μ±μ΄ μλ λ³μ