μ΅μ λ
μ΅μ λ (Optional)
- κ°μ΄ μμ μ μλ μν©μμ μ΅μ λ(Optional)μ μ¬μ©
- μ΅μ λμ λ¬Όμν ? λ‘ λνλΈλ€. (νμ μ΄λ Έν μ΄μ )
- μ΅μ
λμ λ κ°μ§ κ°λ₯μ±μ λνλΈλ€.
- κ°μ΄ μκ³ μ΅μ λλ‘ λν(wrapping)ν΄λμ κ°μ μΈλν(unwrapping)νμ¬ ν΄λΉ κ°μ μ‘μΈμ€ν μ μλ€.
- κ°μ΄ μ ν μλ€.
- μ΅μ λ νμ λΌλ¦¬μ μ°μ°μ λΆκ°λ₯
// μΆμ½ νμ
νν
var serverResponseCode: Int? = 404
// μ μ νμ
νν
var myPetName: Optional<String> = "λ©λ©μ΄"
func pay(with card: String?) {
// ꡬν μ½λ
}
// μ΅μ
λ νμ
λΌλ¦¬μ μ°μ°μ λΆκ°λ₯
var num1: Int? = 4
var num2: Int? = 2
num1 + num2 // μλ¬ λ°μ!
let optionalString1: String? = "Hello, "
let optionalString2: String? = "world!"
// μ΅μ
λ String κ°λ€μ μ°κ²°νλ €λ μλ
let result = optionalString1 + optionalString2 // μλ¬ λ°μ!
nil
- λ³μμ nilμ ν λΉν¨μΌλ‘μ¨ κ°μ΄ μλ μνμ μ΅μ λ νλ‘νΌν°λ₯Ό λ§λ€ μ μλ€.
var serverResponseCode: Int? = 404
serverResponseCode = nil
var surveyAnswer: String?
// surveyAnswerλ μλμΌλ‘ nilλ‘ μ€μ λλ€.
μ΅μ λ λ°μΈλ©
- μ΅μ λ λ°μΈλ©μ μ΅μ λ κ°μ΄ λΉκ°μΈμ§ μ‘΄μ¬νλμ§ κ²μ¬ν ν, μ‘΄μ¬νλ κ²½μ° κ·Έ κ°μ λ€λ₯Έ λ³μμ λμ μμΌ λ°μΈλ©νλ κ²μ μλ―Έ
- λΉ κ°μ 체ν¬νκ³ μ΅μ λ κ°μ μΈλν ν΄μ£Όλ κ²μ κ°μ λ‘ μΈλννλ κ²λ³΄λ€ ν¨μ¬ μμ νλ€.
- if let / if var, guard let / guard varμ μ¨μ μ΅μ λ κ°μ μΆμΆν΄ μλ‘μ΄ λ³μμ λ°μΈλ©νλ€.
- if let vs guard let μ°¨μ΄μ
- if letμ ifλ¬Έμ μ½λ ꡬνλΆ λ΄μμλ§ μμ μ¬μ©μ΄ κ°λ₯νλ€.(μ§μ λ³μ)
- guard let μ guardλ¬Έμ ν΅κ³Όν μμλ₯Ό guardλ¬Έ λ°μμ μ¬μ©μ΄ κ°λ₯νλ€.(μ μλ³μ)
if let <#μμ μ΄λ¦#> = <#μ΅μ
λ κ°#> {
// ꡬν μ½λ
}
let roommateNumbers: Int? = nil
if let roommates = roommateNumbers { // λ°μ€λ₯Ό κΉμ roommatesμ λ΄λ νμ(if let)
print (roommates)
}
// μΆλ ₯κ° μμ
let ticketCounts: Int? = 3
if let ticket = ticketCounts {
print (ticket)
}
// μΆλ ₯κ°: 3
// μ΅μ
λ λ°μΈλ© ν λ³μκ° μ¬λ¬ κ°μΈ κ²½μ°
let boyName : String?
let girlName : String?
boyName = "νλ"
girlName = "λμ°"
// , μ½€λ§λ‘ λμ΄ν©λλ€
if let boy = boyName,
let girl = girlName {
print(boy, girl)
}
// μΆλ ₯κ°: νλ λμ°
let x : Int? = 10
let y : Int? = nil
func opbinding() {
guard let x = x else { return } // μ°λ³ xλ μ΅μ
λν κ°, μ’λ³ xλ μλ‘ λ§λ μμ
print(x)
guard let y = y else { return } // yλ nilμ΄λ―λ‘ μ¬κΈ°μ return
print(y) // μμμ return νμκΈ° λλ¬Έμ μ΄ μ½λ λΌμΈμ μ€νλμ§ μμ
}
opbinding()
// μΆλ ₯κ°: 10
μ΅μ λ κ°μ μΈλν
- κ°μ μΈλν(Force unwrapping)μ !λ₯Ό μ¨μ κ°μ λ‘ μ΅μ λ μΆμΆ (βοΈ λ³μ μμ !λ₯Ό λΆμ΄λ κ²μ notμ μλ―Έ)
- κ°μ μΈλνμ μλͺ» μ¬μ©ν κ²½μ° νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’ λ£λ μλ μμΌλ―λ‘ λ°λμ nilμ΄ μλ κ²μ΄ νμ€ν μν©μμ μ¬μ©ν΄μΌνλ€. (μ΅λν μ μ°λκ² μ’λ€)
let number = Int("42")!
// Stringκ°μ Intλ‘ λ³ννλ ν¨μλ returnκ°μΌλ‘ μ΅μ
λ κ°μ λ°ννλ€.
print(number)
// μΆλ ₯κ°: 42
// κ°μ μΈλνμ΄ μ€ν¨ν κ²½μ°
let address: String? = nil
print(address!)
// μλ¬π¨ λ©μμ§: Unexpectedly found nil while unwrapping an Optional value
μ΅μ λ λ³μμ κ°μ΄ nilμΌ λλ₯Ό μν΄ κΈ°λ³Έκ° μ€μ νκΈ°
- κ°μ΄ nilμΌ κ²½μ°λ₯Ό μν΄ κΈ°λ³Έκ°μ μ€μ ν μ μλ€(nil-coalescing)
- ?? μ μ¬μ©νμ¬ κΈ°λ³Έκ°μ μ¬μ©ν μ μλ€. (κΈ°λ³Έκ°μ λΆμ¬ν λ³μλ μ΅μ λ νμ μ΄ μλλ€.)
- let(var) a = b ?? c ννλ‘ μ΄λ£¨μ΄μ§λλ° bλ μ΅μ λ νμ μ΄κ³ , bκ° nilμΌ κ²½μ°λ aμ cκ° λμ λκ³ , nilμ΄ μλ κ²½μ°μλ μ΅μ λμ μ κ±°ν κ°μ΄ aμ λμ λλ€.
var optNumber: Int? = 3
let number = optNumber ?? 5
print(number) // μΆλ ₯κ° : 3
//numberλ Int? νμ
μ΄ μλλΌ Int νμ
optNumber = nil
let number2 = optNumber ?? 5
print(number) // μΆλ ₯κ° : 5
//numberλ Int? νμ
μ΄ μλλΌ Int νμ
print(heartPath)
// imagePaths["heart"]κ° nilμΌ λ
// μΆλ ₯κ°: "/images/default.png"
μ΅μ λ 체μ΄λ
- μ΅μ λμ μ°μμ μΌλ‘ μ¬μ©νλ κ²
- . μ ν΅ν΄ λ΄λΆ νλ‘νΌν°λ λ©μλμ μ°μμ μΌλ‘ μ κ·Όν λ μ΅μ λ κ°μ΄ μμΌλ©΄ μ΅μ λ 체μ΄λμΌλ‘ μ κ·Όν μ μλ€.
struct Person {
var name: String
var address: Address
}
struct Address {
var city: String
var street: String
var detail: String
}
let sam: Person? = Person(name: "Sam", address: Address(city: "μμΈ", street: "μ λ
Όνλ‘", detail: "100"))
print(sam.address.city)
// μλ¬ π¨. μλ¬ λ©μμ§: Chain the optional using '?' to access member 'address' only for non-'nil' base values
sam?.address.city // samμ΄ μλ€λ©΄ .address.cityκ° μ€νλμ§ μκ³ μλ€λ©΄ νλ¨κ³μ© νκ³ λ€μ΄κ°λ€. μΆλ ₯κ°: μμΈ
- λ§μ½ samμ΄ μ΅μ λμ΄ μλ Person νμ μ΄μλ€λ©΄ sam.address.city κ° κ°λ₯νλ€.
- νμ§λ§ samμ΄ μ΅μ λ νμ μ΄κΈ° λλ¬Έμ addressμ μ κ·Όνλ €λ©΄ sam?.address.city ννλ‘ μ΄λ£¨μ΄μ ΈμΌ νλ€
- μ μ½λ μ€ “sam?.address.city” μ μ΄ν΄λ³΄λ©΄, sam == nil μΌ κ²½μ° μλ¬κ° λμ§ μκ³ λ€ μ½λκ° μ€νλμ§ μλλ€.
- λ€λ₯Έ μΈμ΄μ nullμ .μΌλ‘ μ°Έμ‘°λ₯Ό νλ©΄ λ°λ‘ NullPointerException μλ¬κ° λ°μνλ€.
- λ°λΌμ Swiftμμμ nilμ λ©λͺ¨λ¦¬μ μ£Όμκ°μ΄ μμμ λνλ΄λ nullμ΄ μλλΌ κ°μ΄ μμμ λνλ΄λ κ°(Enum)μ΄λ€.
'π Today I Learned > Swift λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] λ°°μ΄, μΈνΈ, λμ λ리 (0) | 2023.12.07 |
---|---|
[Swift] μ€ν, ν (2) | 2023.12.06 |
[Swift] 쑰건문과 λ°λ³΅λ¬Έ (0) | 2023.12.06 |
[Swift] μ°μ°μ (0) | 2023.12.06 |
[Swift] λ°μ΄ν° νμ (0) | 2023.12.06 |