250x250
반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자 수니

[iOS/Swift] Equatable 본문

iOS - Swift

[iOS/Swift] Equatable

개발자 수니 2022. 1. 25. 18:01
728x90
반응형

📌  이번 글은

Equatable 개념과 사용법입니다.

 

개발을 하면서 자주 Equatable을 사용하는데.. 대충 == 사용하기 위해서 필요한 건 알겠는데....

자주 쓰는 만큼 정확한 개념과 사용법을 숙지하는 게 좋을 것 같아 정리해봅니다.

 

Apple Developer

 

iOS 8.0+

iPadOS 8.0+

macOS 10.10+

Mac Catalyst 13.0+

tvOS 9.0+

watchOS 2.0+

Xcode 6.0.1+

 

Equatable은 Protocol

Protocol은 특정 작업이나 기능에 적합한 메서드, 프로퍼티 및 기타 요구사항을 정의해주고, 

이러한 Protocol은 class, struct, enum에서 채택하여 이런 요구사항을 실제로 구현할 수 있도록 도와줍니다.

 

즉, Protocol은 메서드, 프로퍼티 등을 정의만 하고, 이 Protocol을 채택한 곳에서 구현을 합니다.

 

먼저 Equtable의 경우, 이미 애플에서 만들어 놓은 Protocol입니다.

우리는 이제 필요한 곳에 채택하여 애플이 정의해놓은 요구사항에 맞춰 구현하면 됩니다.

 

 

Equatable 개념

A type that can be compared for value equality.
값이 같은지 비교할 수 있는 형식

Equatable은 객체와 객체, 같은 구조체(struct)로 만들어진 요소들을 비교할 수 있게 해주는 프로토콜입니다.

Equatable을 채택한 타입은 '== (같다)' / '!= (같지 않다)'를 사용할 수 있습니다.

 

Equatable을 채택할 수 있는 타입은 Protocol을 채택할 수 있는 class, struct, enum입니다.

 

Swift 표준 라이브러리의 대부분 기본 유형들은 Equatable을 채택하고 있어요.

그래서 저희는 이미 Swift를 개발하면서 Equatable 채택 없이 String, Double 등의 값에 '=='/'!='을 사용할 수 있었던 것입니다.

 

Equatable 정의

public protocol Equatable {

    /// Returns a Boolean value indicating whether two values are equal.
    ///
    /// Equality is the inverse of inequality. For any values `a` and `b`,
    /// `a == b` implies that `a != b` is `false`.
    ///
    /// - Parameters:
    ///   - lhs: A value to compare.
    ///   - rhs: Another value to compare.
    static func == (lhs: Self, rhs: Self) -> Bool
}

extension Equatable {

    public static func != (lhs: Self, rhs: Self) -> Bool
}

 

Equatable 사용

1. class 생성

2. class 비교 >> ERROR

Operator function '==' requires that 'Group' conform to 'Equatable'
연산자 함수 '=='를 사용하려면 'Group'이 'Equatable'을 준수해야 합니다.

Swift에서는 class에 '=='/'!=' 연산자를 사용하면 위와 같은 오류가 발생합니다. (struct, enum도 동일)

이때 Equatable을 채택해주면 됩니다.

3. Equatable 채택

Type 'Group' does not conform to protocol 'Equatable'
Do you want to add protocol stubs?
'Group' 유형이 'Equatable' 프로토콜을 준수하지 않습니다.
프로토콜 stubs을 추가하시겠습니까?

채택을 해줬더니, 오류가 납니다.

Equatable의 프로토콜을 준수하지 않았기 때문입니다.

4. Equatable 준수

Equatable을 채택한 class에 아래와 같은 func를 추가합니다. 

// 4. Equatable 준수
static func == (lhs: Group, rhs: Group) -> Bool {
    return lhs.name == rhs.name && lhs.taskCount == rhs.taskCount
}

위 코드에 name과 taskCount는 Equatable이 이미 채택되어 있는 타입(Int, String, Double 등..)이어서 오류가 발생하지 않습니다.

 

이제 오류가 발생하지 않습니다.

'==' 사용도 잘 됩니다.

 

 

 

 

🙋🏻‍♀️ 참고

Swift ) Equatable

swift - Equatable

 

 

728x90
반응형

'iOS - Swift' 카테고리의 다른 글

[iOS/Swift] Generic  (0) 2022.02.02
[iOS/Swift] Identifiable  (0) 2022.01.26
[iOS/Swift/Basic] 튜플 Tuple  (0) 2022.01.22
[iOS/Swift/Basic] Any, AnyObject와 nil  (0) 2022.01.22
[iOS/Swift] SwiftLint 적용하기 (pod 'SwiftLint')  (0) 2022.01.19
Comments