Bibi's DevLog πŸ€“πŸŽ

[Swift] ===(_:_:) 와 !==(_:_:) λ³Έλ¬Έ

πŸ“±πŸŽ iOS/πŸ•Š Swift

[Swift] ===(_:_:) 와 !==(_:_:)

λΉ„λΉ„ bibi 2022. 10. 12. 15:36

Apple Developer Documentation

===(::)

두 μ°Έμ‘°κ°€ λ™μΌν•œ μΈμŠ€ν„΄μŠ€ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Boolean값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

func === (lhs: AnyObject?, rhs: AnyObject?) -> Bool
  • lhs , rhs : 비ꡐ할 μ°Έμ‘°

μ„€λͺ…

이 μ—°μ‚°μžλŠ” 두 μΈμŠ€ν„΄μŠ€κ°€ 같은 값이 μ•„λ‹ˆλΌ, 같은 κ³ μœ μ„±(identity)을 가지고 μžˆλŠ”μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. κ°’μ˜ 동일성을 μœ„ν•΄μ„œλŠ”, == μ—°μ‚°μžμ™€ Equatable ν”„λ‘œν† μ½œμ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.

μ•„λž˜ μ˜ˆμ‹œλŠ” μ •μˆ˜ν˜• νƒ€μž…μ— μ°Έμ‘° μ˜λ―Έκ°€ μžˆλŠ” IntegerRef λΌλŠ” νƒ€μž…μ„ μ •μ˜ν•©λ‹ˆλ‹€.

class IntegerRef: Equatable {
    let value: Int
    init(_ value: Int) {
        self.value = value
    }
}

func ==(lhs: IntegerRef, rhs: IntegerRef) -> Bool {
    return lhs.value == rhs.value
}

IntegerRef λŠ” ν΄λž˜μŠ€μ΄λ―€λ‘œ, κ·Έκ²ƒμ˜ μΈμŠ€ν„΄μŠ€λŠ” === μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, IntegerRefκ°€ Equatable ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λ―€λ‘œ, μΈμŠ€ν„΄μŠ€λŠ” == μ—°μ‚°μžλ‘œλ„ 비ꡐ될 수 μžˆμŠ΅λ‹ˆλ‹€.

let a = IntegerRef(10)
let b = a
print(a == b)
// Prints "true"
print(a === b)
// Prints "true"

=== μ—°μ‚°μžλŠ” 두 μΈμŠ€ν„΄μŠ€μ˜ 값이 같더라도, 두 μΈμŠ€ν„΄μŠ€κ°€ μ„œλ‘œ λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€ 객체λ₯Ό μ°Έμ‘°ν•œλ‹€λ©΄ false λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

let c = IntegerRef(10)
print(a == c)
// Prints "true"
print(a === c)
// Prints "false"

Apple Developer Documentation

!==(::)

두 μ°Έμ‘°κ°€ μ„œλ‘œ λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Boolean값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

func !== (lhs: AnyObject?, rhs: AnyObject?) -> Bool
  • lhs , rhs : 비ꡐ할 μ°Έμ‘°

μ„€λͺ…

이 μ—°μ‚°μžλŠ” 두 μΈμŠ€ν„΄μŠ€κ°€ λ‹€λ₯Έ 값이 μ•„λ‹ˆλΌ, λ‹€λ₯Έ κ³ μœ μ„±(identity)을 가지고 μžˆλŠ”μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. κ°’μ˜ 비동일성을 μœ„ν•΄μ„œλŠ”, != μ—°μ‚°μžμ™€ Equatable ν”„λ‘œν† μ½œμ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.