Equatable이란?(swift)~object끼리 비교해보자~

5740 단어 SwiftEquatable

1. Equatable이란?


Equal(=)은
Equatable을 같게 하는 것은 비교할 수 있다는 뜻이다.
지금까지 비교할 수 없었던 Object 사이를 비교할 수 있다는 얘기다.대충 정리해보면 직접 만든 맞춤형 학급 등이다.

2. Equatable의 예가 아니다


길잡이반을 만들어 봤어요.변수는 하나뿐입니다.
Teacher.swift
class Teacher{
    var name:String

    init(name: String) {
        self.name = name
    }
}
나는 네 명의 선생님을 만들어 그에게 이름을 지어 주었다.
var teachers:[Teacher] = []

var one = Teacher(name:"AJ")
var two = Teacher(name: "Bob")
var three = Teacher(name: "Amy")
var four = Teacher(name: "John")

teachers.append(one)
teachers.append(two)
teachers.append(three)
teachers.append(four)

name 사이 비교 가능!(String 비교 중)
if one.name == two.name{
    print("match!")
}
근데 반을 비교하면 오류가 발생합니다!
if one == two{
    print("same!")
}

if teachers[0] == teachers[1]{
}

다른 건 Aray도 있고.index (of:) 를 사용할 수 없습니다!(이것이 가장 곤란하다.)
teachers의 배열은 Teacher로 구성되어 있기 때문에 비교할 수 없습니다.
if let index = teachers.index(of: teachers.name){
}

3. Equatable 시도

  • 먼저 Teacher 클래스에 Equtable을 추가해야 합니다.
  • Teacher 클래스에 Equatable 추가 방법
  • Teacher.swift
    class Teacher:Equatable{
        var name:String
    
        init(name: String) {
            self.name = name
        }
    
      func ==(lhs: Teacher, rhs: Teacher) -> Bool{
        return lhs.name == rhs.name
      }
    }
    
    비교 방법에서lhs는 왼쪽의object를,rhs는 오른쪽의object를 나타낸다.
    비교 판정 방법의 명칭.비교해 보면 틀리지 않을 거야!
    print(one == two)
    //false
    
    
    ※ 같은 이름이 아니어서 가짜로 돌아왔습니다.

    3. 여러 변수로 Equatable 진행


    Teacher.swift
    class Teacher: Equatable{
        var name:String
        var age:Int
    
        init(name: String, age:Int) {
            self.name = name
            self.age = age
        }
    
        static func ==(lhs: Teacher, rhs: Teacher) -> Bool{
            return lhs.name == rhs.name && lhs.age == rhs.age
        }
    }
    
    이렇게 하면name과age가 같은지 비교할 수 있습니다.
    코드 여기 있어요!
    https://github.com/Saayaman/swift/tree/master/Practices/Equatable
    참조:
    http://nshipster.com/swift-comparison-protocols/

    좋은 웹페이지 즐겨찾기