develop

Class Struct == Operator 본문

iOS

Class Struct == Operator

pikachu987 2021. 1. 27. 15:31
반응형

class나 struct에서 비교연산자를 사용하면

struct Example1 {
    var value: Int?
}

let structExample1 = Example1()
let structExample2 = Example1()

if structExample1 == structExample2 {
    
}
class Example2 {
    var value: Int?
}

let classExample1 = Example2()
let classExample2 = Example2()

if classExample1 == classExample2 {
    
}

error: binary operator '==' cannot be applied to two 'Example1' operands 라는 에러가 난다.

하지만 struct나 class를 비교해야 할때가 많다.

이럴때는 비교연산자를 직접 만들어줘야 한다.

 

전역으로 비교연산자 만들기

struct Example1 {
    var value: Int?
    
}

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

let structExample1 = Example1()
let structExample2 = Example1()

if structExample1 == structExample2 {
    
}

 

static 메서드로 비교연산자 만들기

struct Example1 {
    var value: Int?
    
    static func ==(lhs: Example1, rhs: Example1) -> Bool {
        return lhs.value == rhs.value
    }
}

let structExample1 = Example1()
let structExample2 = Example1()

if structExample1 == structExample2 {
    
}

 

class도 동일하게 사용할 수 있다.

class Example2 {
    var value: Int?
    
    static func ==(lhs: Example2, rhs: Example2) -> Bool {
        return lhs.value == rhs.value
    }
}

let classExample1 = Example2()
let classExample2 = Example2()

if classExample1 == classExample2 {

}

 

lhs와 rhs는 Left-hand system, Right-hand system이란 뜻이다.

 

반응형

'iOS' 카테고리의 다른 글

Require  (0) 2021.01.29
Class convenience init  (0) 2021.01.28
Struct initialization  (0) 2021.01.26
autoreleasepool  (0) 2021.01.25
BackgroundFetch 앱 백그라운드 상태에서 로직 실행하기  (0) 2021.01.24
Comments