-
[iOS] Equatable μ΄λ?iOS/π Documentation 2021. 1. 20. 16:57
Equatable μ κ°μ λλ±μ± λΉκ΅ κΈ°λ₯μ μ 곡νλ νμ μ λλ€.
μ₯? νλ‘ν μ½μΈλ° μ νμ μ΄λ?
μ€μννΈμμλ νλ‘ν μ½λ νμ μ λλ€! π²
κ΄λ ¨ κΈ: Protocol as Types
μ€μννΈμμ κ°μ κ°μμ == (equal to) μ != (not equal to) μ°μ°μλ‘ λΉκ΅ν©λλ€.
Equatable νλ‘ν μ½μ μ±νν νμ μ == μ != μ°μ°μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
Swiftμ primitive type λ€μ Equatable μ μλμΌλ‘ μ§μν©λλ€. (Int, Double, String ... λ±)
κ·Έλ λ€λ©΄ 컀μ€ν νμ μΈ enum, struct, class μ κ²½μ°λ μ΄λ¨κΉμ?
νλμ© λ³΄κ² μ΅λλ€.ππ»ππ»ππ»
enum
κ΄λ ¨ κΈ : emumeration μ΄μ 리
μ°κ΄ κ°μ΄ μλ κΈ°λ³Έ μ΄κ±°ν ννμΌ κ²½μ° Equtable νλ‘ν μ½ conformance(μ±ν) λ₯Ό μ μΈνμ§ μμλ μλμΌλ‘ μ§μν©λλ€.
enum Color { case red,green,blue } var foregroundColor = Color.red var backgroundColro = Color.blue forgroundColor == backgroundColor // false
μ°κ΄ κ°μ΄ μλ κ²½μ°, μ°κ΄ κ°μ νμ μ΄ Equatable μ μ±νν κ²½μ° νλ‘ν μ½ conformance μ μΈλ§ ν΄μ£Όλ©΄ μλ μ§μν©λλ€.
κ·Έλ μ§ μμ κ²½μ° μ§μ == κ³Ό != μ°μ°μλ₯Ό ꡬνν΄μ£Όμ΄μΌ ν©λλ€.
" μ°μ°μλ ν¨μμ λλ€ "
μ ν ν½κ³Όλ κ΄λ ¨μ΄ μμ§λ§, ν¨μλ μΌκΈ κ°μ²΄ μ΄λ―λ‘ λ³μμ μ μ₯, νλΌλ―Έν°λ‘ μ λ¬, λ¦¬ν΄ κ°μΌλ‘ μ¬μ©μ΄ κ°λ₯ν©λλ€.
λνμ μΈ κ³ μ°¨ν¨μμΈ map, filter, reduce λ±μ λλ²μ§Έ νλΌλ―Έν°μ '+', '-' μ κ°μ μ°μ°μλ§ μ λ¬ν μ μλ μ΄μ λ μ°μ°μλ ν¨μμ΄κΈ° λλ¬Έμ λλ€.
struct
μ μ₯ μμ±μ΄ Equatableμ μ±νν νμ μΌλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©΄ νλ‘ν μ½ conformance μ μΈλ§ ν΄μ£Όλ©΄ μλ μ§μν©λλ€.
κ·Έλ μ§ μμ κ²½μ° μ§μ == κ³Ό != μ°μ°μλ₯Ό ꡬν ν΄μ£Όμ΄μΌ ν©λλ€.
struct Point: Equatable { var x: Double var y: Double } var x = Point(x:1, y:2) var y = Point(x:2, y:3) x == y // false
// μλ μ 곡λμ§λ§ μ§μ ꡬνν΄μ€λ€λ©΄ μ΄λ°μμ μ½λκ° κ°λ₯ν©λλ€. // '==' μ°μ°μλ§ κ΅¬ννλ©΄ '!=' μ°μ°μλ μλμ 곡λ©λλ€. extension Point { static func ==(lhs: Point, rhs: Point) -> Bool { return (lhs.x == rhs.x) && (lhs.y == rhs.y) } }
class
ꡬνμ΄ μλ μ 곡λμ§ μμΌλ―λ‘, νλ‘ν μ½ conformance λ₯Ό μ μΈνκ³ μ°μ°μλ₯Ό μ§μ ꡬνν΄μ£Όμ΄μΌ ν©λλ€.
class StreetAddress { let number: String let street: String let unit: String? init(_ number: String, _ street: String, unit: String? = nil) { self.number = number self.street = street self.unit = unit } } // '==' μ°μ°μλ₯Ό μ§μ ꡬνν΄μ£Όμ΄μΌνλ€. == μ΄ κ΅¬νλλ©΄ != λ μλ μ 곡λλ€. extension StreetAddress: Equatable { static func == (lhs: StreetAddress, rhs: StreetAddress) -> Bool { return lhs.number == rhs.number && lhs.street == rhs.street && lhs.unit == rhs.unit } }
Equality is Separate From Identity
Equatableμ κ°μ΄ κ°μμ§ νλ¨νλ μ°μ°μμ κ΄λ ¨λ νλ‘ν μ½μ λλ€.
'==' μ '!='
κ°μ μΈμ€ν΄μ€μμ νλ¨νλ μ°μ°μκ° μλλλ€.
κ°μ μΈμ€ν΄μ€μμ νλ¨ν λλ '===' μ°μ°μλ₯Ό μ¬μ©ν©λλ€.
λ!
'iOS > π Documentation' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Bundle - Foundation (0) 2021.01.25 Hashable - Protocol (0) 2021.01.20 The Role of View Controllers (3) - Overview - View Controller Programming Guide for iOS (0) 2021.01.14 The Role of View Controllers (2) - Overview - View Controller Programming Guide for iOS (0) 2021.01.14 The Role of View Controllers (1) - Overview - View Controller Programming Guide for iOS (0) 2021.01.14