2017-04-20 13 views
1

내 사용자 정의 프로토콜을 준수하는 UIView 유형이 필요합니다. 나는 이런 식으로 작업을 수행하려고 노력하지만, 엑스 코드는 적절한 선언 아니라고 말한다 :프로토콜 문제가있는 신속한 타입 이터

typealias ViewThatConformsToProtocol = UIView: MyCustomProtocol 

이 너무 작동하지 않습니다

typealias ViewThatConformsToProtocol = UIView, MyCustomProtocol 

하지만 대한 서브 클래스를 사용하지 않으 그. 그것을하는 어떤 방법일까요?

P. 서브 클래스로 나는 그것과 같은 것 :

class ViewThatConformsToProtocol: UIView, MyCustomProtocol { 

} 

하지만 (예를 들어 내 디자인 패턴에 대해이기 때문에 서브 클래 싱을 사용하지 않으 난 그냥 내보기 이것의 behaviou를 지원하는지 알 필요가있을 때 때문에 프로토콜에서 ViewThatConformsToProtocol 하위 클래스로이보기를 원하지 않으며 View1은 Protocol1 및 Protocol2로 확인할 수 있지만 View2는 Protocol1 및 Protocol3을 준수 할 수 있습니다. Objective-C에서는 UIView *viewForProtocol = (UIView<MyCustomProtocol> *)view1을 쉽게 선언 할 수 있지만 SWIFT에서는 불가능한 것처럼 보입니다. 따라서 둘러보기를 찾고 있습니다.

+0

나는 당신이 달성하기를 정말로 얻지 못합니다. "하위 클래스를 사용했다면 어떻게 할 것인가?" – Sweeper

+0

@Sweeper, 코드 및 설명을 추가했습니다. –

+0

@MaxPevsner,이 문서는 도움이되지 않았습니다 –

답변

0

사실 @ MaxPevsner의 제안은 정확했지만 정확하지 않았습니다. typealias을 사용할 필요가 없습니다. 왜냐하면 모든 마법이 제네릭을 할 수 있기 때문입니다.

protocol MyCustomProtocol { 
    // ... 
} 

class MyCustomView: UIView, MyCustomProtocol { 

} 

class MyClass<T> where T: MyCustomProtocol { 

    func someFunction<T>(_ value: T) { 
     self.property = value 
    } 
} 

// ... 
let view = MyCustomView() 
let trick = MyClass<MyCustomView>() 
trick.someFunction(view) 

귀하의 요구 사항에 맞습니까?

+0

실제로 Objective-C UIView * viewForProtocol = (UIView *) 많은 메소드에서 view1 (Objective-C 코드를 SWIFT로 변환) –

+0

@PaulT. 업데이트 된 코드 스 니펫 – Astoria

0

입력란은 특정 유형의 별명입니다. 당신은 등가 빠른 코드는 아마

let viewForProtocol = view1 as? MyCustomProtocol as ? UIView 
+0

아니요, 작동하지 않습니다. UIView 만 있습니다. –

+0

UIView 또는 MyCustomProtocol 핸들이 있습니다.둘 다 가질 수는 없습니다. – Spads

0
typealias DesiredAlias<T> = T where T:MyCustomProtocol 

//you can assign type like below 
var variableThatConformsToProtocol: DesiredAlias<MyCustomProtocol> 

의 조각이 될 것입니다 당신이

UIView *viewForProtocol = (UIView<MyCustomProtocol> *)view1 

을 게시 한 스 니펫 코드 주어진 조건

의 집합을 준수 뭔가를 요구하고있다 코드가 요구 사항을 충족합니까? 사실 MyCustomProtocol에 부합하는 유형이므로 id<MyCustomProtocol> variableThatConformsToProtocol과 비슷합니다. Objective-C