SWIFT

[Swift]. self vs Self

clamp 2023. 3. 7. 14:15

 

self

클래스/구조체 내에서 해당 인스턴스(자기자신)을 가르킴

 

 

 


프로토콜에서의 Self사용(프로토콜을 채택하는 해당 타입을 가르킴)

프로토콜 내에서 Self를 선언하면 채택한 타입을 의미한다.

//BinaryInteger이란 프로토콜의 확장
extension BinaryInteger{
    func squared() -> Self{   //BinaryInteger이란 프로토콜을 채택한 해당타입(Int, UInt등등..)
        return self * self
    }
}

// 위의 Self를 Int나 UInt로 적는다면 BinaryInteger을 채택한 모든 타입을 확장해줘야한다 아래처럼

/*
extension BinaryInteger {
    func squared() -> Int {
        return self * self
    }
}
extension BinaryInteger {
    func squared() -> UInt {
        return self * self
    }
}
*/