2018년 7월 6일 금요일

Self vs self vs Type

1. Type vs self

메타타입은 타입의 타입을 의미한다.
 

class SomeClass {
}

/*
SomeClass.Type 은 타입의 타입을 정의
SomeClass.self 은 타입의 타입값
*/

let someInstance: SomeClass.Type = SomeClass.self

/*
인스턴스메써드에서 self 는 인스턴스 자기자신을 자리킴
*/
class SomeClass {

   var member = "Hello"

   func someFunction {
         self.member = "World"
   }
}

/*
타입메써드에서 self 는 타입을 자리킴
*/
class SomeClass {

  static var staticMember = "Hello"

   static func someFunction {
         self.staticMember = "World"
   }
}


2. Self
Self는 자기자신의 Type을 가리킴,  상속받은것 까지 포함.

//사용예1

 extension SomeClass where Self: OtherClass {
}

//사용예2
func someFunction() -> Self {
}

//사용예3
let vc = someInstance as? Self

let allValues: [Self] = ~

let value: Self = ~