[Swift] κΈ°μ΄ λ¬Έλ² - μ΅μ λ, μ΅μ λ λ°μΈλ© (feat. if letκ³Ό guard let μ°¨μ΄μ κ°λ¨ν)
μλ νμΈμ, κ°μμ λλ€! μ€λμ μ΅μ λκ³Ό μ΅μ λ λ°μΈλ©μ λν΄μ μμ보λλ‘ νκ² μ΅λλ€. μμ 곡λΆνλ swift 곡μλ¬Έμ The BasicνΈμλ μ κΉ λμμλλ°, κΈ°μ‘΄μ μ κ° κ³΅λΆνλ python μΈμ΄μμλ μμλ κ°λ μ΄λΌ μμνλλ°μ, λ€μ 곡λΆν΄λ³΄λλ‘ νκ² μ΅λλ€! μμ~
μ΅μ λ (optional)
μ νμ μΈ, μ΄λΌλ λ»μ κ°μ§ νμ μ΄λ€. κ°μ΄ μμ μλ μκ³ μμ μλ μλ€λ κ²μ μλ―Ένλ€. μ΄κ² 무μ¨λ§μΈκ°?
var name: String = "potato"
μμ κ°μ΄ nameμ΄λΌλ λ³μκ° μλ€. ν΄λΉ λ³μλ μ§κΈ potatoλΌλ sringμ κ°κ³ μλ€. κ·ΈλΌ κ°μ΄ μλ€λ©΄?
var name: String = ""
μ΄λ κ² μ μνλ©΄ λμ§ μλκ°? νμ§λ§ , μ μ½λλ₯Ό μ§μ(?)ν΄λ³΄λ©΄ κ²°κ΅ nameμ String ννμ "" λΉλ¬Έμμ΄μ μ΄μ¨λ κ°κ³ μλ κ²μ΄λ€.
μ½λμμλ κ°μ κ°μ§κ³ μμ§ μλ€λ κ²μ, nullκ°μ μλ―Ένλ€. κ·Όλ°, μ¬κΈ°μ μ κΉ! Swiftλ nullκ°μ΄ μλλΌ nil μ΄λΌκ³ νννλ€ :) μ¦, κ°μ΄ μλ€λ κ²μ μλμ κ°μ ννκ° λμ΄μΌνλ€!!
var name: String? = nil
μ΅μ λ λ³μμ νν λ° νΉμ§
κ·Έλ λ€κ³ nilμ΄λΌλ κ°μ μ무λ°λ λ£μ μλ μλ€. μ μ½λμμ 보μλ―μ΄ nil μ²λΌ κ°μ΄ μμ μλ μκ³ , μμ μλ μλ λ³μλ₯Ό μ§μ ν λμλ ? λ¬Όμνλ₯Ό μ¬μ©νλ€. μ΄λ κ² μ΅μ λ λ³μμλ μ΄κΈ°κ°μ μ€μ νμ§ μμΌλ©΄ nil κ°μ λν΄νΈλ‘ κ°μ§λ€.
μΌλ°μ μΈ νλ‘κ·Έλλ° μΈμ΄μμλ κ°μ΄ null κ°μ κ°κ² λλ©΄, λ°νμμλ¬κ° λ°μνλ€. νμ§λ§ swiftμμλ μμ μ±μ΄ μ₯μ μΈ μΈμ΄μ΄λ―λ‘, κ°μ΄ μμ μλ μλ λ³μλ₯Ό μ§μ νλ―λ‘μ¨ μ΄λ¬ν μ€λ₯λ₯Ό λ―Έμ°μ λ°©μ§νλ€.
μλμ κ°μ΄ λ³μμ νμ μ μ΅μ λ νμ μΌλ‘ μ§μ ν μμλ€.
var name: String?
λν μ΅μ λ λ³μμλ κ°μ΄ μλ λ³μλ‘ μ΄κΈ° μμ±ν μ μλ€.
var optionalValue: String? = "potato"
μ μ½λλ₯Ό 보면, μ΄κΈ°κ°μ potatoμ΄μ§λ§, stringμ΅μ λ νμ μ κ°μ§λ―λ‘, μΆν nil κ°μ κ°μ§ μλ μλ€.
μ£Όμν μ μ΄ μλ€. μμ°ν String? κ³Ό Sringμ λ€λ₯΄λ€. λ°λΌμ μλμ κ°μ μ½λλ μ€λ₯λ₯Ό λ°μνλ€. (λ€λ₯Ένμ μ΄κΈ° λλ¬Έ)
var optionalValue: String? = "potato"
var newValue: String = optionalValue
// ERROR message : Value of optional type 'String?' must by unwrapped to a value of type 'String'.
/* μ΅μ
λ λ³μλ₯Ό wrappedλΌκ³ νλ€.
μλνλ©΄, ν΄λΉ optionalValueλ₯Ό μΆλ ₯ν΄λ³΄λ©΄
optional("potato")λΌκ³ μΆλ ₯λλλ°, μ΄λ₯Ό optionalλ‘ ν¬μ₯λμ΄μλ€κ³ ν΄μν μ μλ€. */
μ μ½λλ μ€λ₯λ₯Ό λ°μμν¨λ€. μλλ©΄ newValueλ μΌλ° Stringλ³μμΈλ°, μ¬κΈ°μ μ΅μ λ λ³μμΈ optionalValueλ₯Ό μ μ₯νλ €κ³ νκΈ° λλ¬Έμ΄λ€. ν¬μ₯λμ΄μλ μ΅μ λ λ³μλ, μΌλ° νμ λ³μμ κ²°ν©λ, μ°μ°λ λΆκ°λ₯νλ€. μ΄ μ°μ°μ μ€ννλ €λ©΄ μ΅μ λ λ°μΈλ©μ΄ νμνλ€.
μ΅μ λ λ°μΈλ©
μ΅μ λμ΄λΌλ ν¬μ₯μ§μμ κ°μ μΆμΆνλ λ°©λ²μ λν΄μ λ°°μ보μ. μ΅μ λ ν΄μ λ°©λ²μ λ€μκ³Ό κ°μ΄ λκ°μ§ λ°©λ²μ΄ μλ€.
- λͺ
μμ ν΄μ
- κ°μ ν΄μ
- λΉκ°μ ν΄μ (μ΅μ λ λ°μΈλ©)
- 묡μμ ν΄μ
- μ»΄νμΌλ¬μ μν μλ ν΄μ
- μ΅μ λμ 묡μμ ν΄μ
βΆ λͺ μμ ν΄μ
1) κ°μ ν΄μ : ! (λλν) μ¬μ©νμ¬ κ°μ ν΄μ
μ΅μ λλ‘ μ μΈλ λ³μ λ€μ ! λ₯Ό λΆμ¬μ€λ€.
var number: Int? = 3
print(number) // prints optional(3)
print(number!) // prints 3
!λ₯Ό λΆμ¬μ£Όλ©΄, μ΅μ λ ν¬μ₯μ§λ₯Ό κ°μ λ‘ λ²κ²¨μ λμ¨λ€λ κ²μ μ μ μλ€. νμ§λ§ μ΄λ° λ°©μμ λ§€μ° μννλ€. λ§μ½ ν΄λΉ numberλ³μκ° nilκ°μ κ°μ§λ€λ©΄, nilμ λλνλ₯Ό λΆμ΄κ² λμ΄ μ€λ₯κ° λ°μνλ©΄μ νλ‘κ·Έλ¨μ΄ κ°μ μ’ λ£λκΈ° λλ¬Έμ΄λ€. κ·Έλ¬λ©΄ μ‘°κΈ λ μμ ν λ°©μμ 무μμΌκΉ? λ°λ‘ λΉκ°μ ν΄μ μ΅μ λ λ°μΈλ©λ°©μμ μ¬μ©νλ©΄ λλ€.
2) λΉκ°μ ν΄μ μ΅μ λ λ°μΈλ© : if let / guard let
κ°μ ν΄μ λ°©μλ³΄λ€ μμ ν λ°©μμ΄λ€.
if let result = number {
print(result)
} else {
// numberκ° nilμ΄λΌμ κ°μΆμΆμ μ€ν¨νλ©΄ μ¬κΈ° μ€ν
}
// prints 3
μ΅μ λ λ°μΈλ©μ ifλ¬Έκ³Ό κ°μ 쑰건μλμ μ΅μ λ νμ μ κ°μ λ³μ λλ μμλ₯Ό ν λΉνμ¬ μ¬μ© κ°λ₯νλ€. if let λ§κ³ guard letλ μ‘΄μ¬νλ€.
func test() {
let number: Int? = 5
guard let result = number else { return }
print(result)
}
test()
// prints "5"
+ κ·ΈλΌ, if let κ³Ό guard letμ μ°¨μ΄μ μ 무μμΌκΉ? μΈμ μ μ ν μ¬μ©νλ κ²μ΄ μ’μκΉ?
ifλ₯Ό μ΄μ©νμ¬ μ΅μ
λ λ°μΈλ©μ νκ² λλ©΄ μ΅μ
λμ΄ μΆμΆλ λ³μλ μμλ₯Ό if λΈλ‘ μμμλ§ μ¬μ© κ°λ₯νλ€. νμ§λ§ guard λ¬Έμ νμ©νλ©΄, guardλ¬Έ λ€μ ν¨μ μ 체 ꡬ문μμ μ΅μ
λμ΄ μΆμΆλ λ³μλ μμλ₯Ό μ¬μ©ν μ μλ€.
(guardλ¬Έμ μ‘°κ±΄μ΄ νΈλ£¨μΌλ guardλ¬Έμ ν΅κ³Όμν€κ³ falseμ΄λ©΄ elseꡬ문μ μ€νν λ€ νλ¦μ μ’
λ£μν¨λ€. μμΈν ν΄λ¦)
⢠묡μμ ν΄μ
1) μ»΄νμΌλ¬μ μν μλν΄μ : λΉκ΅μ°μ°μ μ¬μ©μ μ΅μ λ μλ ν΄μ
μ΅μ λκ°μ λΉκ΅μ°μ°μλ₯Ό μ΄μ©νμ¬ λ€λ₯Έκ°κ³Ό λΉκ΅νλ©΄ μ»΄νμΌλ¬κ° μλμΌλ‘ μ΅μ λμ ν΄μ μμΌμ€λ€. λ€μ μ½λλ₯Ό 보μ.
let value: Int? = 6
if value == 6 {
print("valueκ° 6μ
λλ€.")
} else {
print("valueκ° 6μ΄ μλλλ€.")
}
// prints "valueκ° 6μ
λλ€."
μ΄λ κ², μ΅μ λκ°μ λΉκ΅μ°μ°μλ₯Ό νμ©νλ©΄ μλμΌλ‘ μ΅μ λμ΄ ν΄μ λλ€.
2) μ΅μ λμ 묡μμ ν΄μ : ! (λλν) μ¬μ©νμ¬ λ¬΅μμ μ΅μ λ νμ μ§μ
μ΄λ κ°μ μ¬μ©ν λ μλμΌλ‘ μ΅μ λμ΄ ν΄μ λλ κ²½μ°λ₯Ό λ§νλ€. λ€μ μ½λλ₯Ό 보μ.
let string = "12"
var stringToInt: Int! = Int(string)
// κΈ°μ‘΄μ λ°°μ λ μ΅μ
λμ ? μ΄λ€. νμ§λ§ !λ₯Ό μ¬μ©νλ©΄ 묡μμ μ΅μ
λ νμ
μ΄ λλ€.
print(stringToInt + 1)
// prints "13"
μ΄λ κ² νμ΄μ¬μ΄λ λ€λ₯Έ μΈμ΄λ§ λ°°μ λ μ μκ²λ μ‘°κΈ μμνλ κ°λ μΈ μ΅μ λμ λν΄μ μμ보μμ΅λλ€. λ€μμ ꡬ쑰체μ κ΄λ ¨ν κΈ°μ΄ λ¬Έλ²μ ν¬μ€ν νκ² μ΅λλ€. κ°μ¬ν©λλ€!