2017-11-13 3 views
1

메모리 포인터가 유형에 바인딩 된 금속 예제의 코드 행과 혼동 스럽습니다.Swype에서 struct 유형을 사용한 후 직접

uniforms = UnsafeMutableRawPointer(uniformBuffer.contents()).bindMemory(to: Uniforms.self, capacity: 1) 

내 혼란은 Uniforms 입력 후 .self입니다. Uniforms은 Objective-C 파일에 정의 된 구조체이며 코드는 .self이 호출되지 않고 실행되지 않습니다. 그게 왜 필요한가요?

답변

2

.self메타 유형 인스턴스을 해당 유형으로 반환합니다. 유형 안전 식별자 (예 : 문자열을 사용하는 것보다 안전). 그런 다음 사용 가능한 이니셜 라이저, 정적 메서드, 해당 메타 인스턴스 인스턴스의 정적 속성을 안전하게 호출 할 수 있습니다.

예를 들어, 그것은뿐만 아니라 변수에 저장할 수 :

let metatype: Uniforms.Type = Uniforms.self 

Uniforms.Type실제 메타 타입 (즉, 유형의 종류)입니다.

메타 타입 충돌 과정. 매우 빠른 예는이 메타 물건이 실제로 유용 할 수 있습니다 방법에 대한 느낌을 얻을 수 있습니다 :

class Super { 
    let id: Int 
    required init(id: Int) { self.id = id } 
} 

class SubA: Super { ... } 
class SubB: Super { ... } 

let subclass: Super.Type = SubA.self 

한 후, 나중에 실제 서브 클래스 유형 이름 하드 코딩없이 인스턴스 를 만들 subclass를 사용

let obj = subclass.init(id: 123) // new SubA instance. 
1

Swift에서 .self는 메타 유형이나 유형 인스턴스를 추출하는 유형에서 사용될 수 있습니다. 예를 들어 .self를 사용하여 메타 유형을 가져 와서 API에 전달합니다.

self.tableView.registerClass(
    UITableViewCell.self, forCellReuseIdentifier: "myUIViewCell") 
관련 문제