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
}
}
*/