Swift에서는 다음과 같이 선언하여 변수의 유형을 명시 적으로 설정할 수 있습니다.
var object: TYPE_NAME
한 단계 더 나아가 여러 프로토콜을 준수하는 변수를 protocol
선언 하려면 선언적을 사용할 수 있습니다 .
var object: protocol<ProtocolOne,ProtocolTwo>//etc
하나 이상의 프로토콜을 따르고 특정 기본 클래스 유형 인 객체를 선언하려면 어떻게해야합니까? Objective-C는 다음과 같습니다.
NSSomething<ABCProtocolOne,ABCProtocolTwo> * object = ...;
Swift에서는 다음과 같이 보일 것으로 예상합니다.
var object: TYPE_NAME,ProtocolOne//etc
이는 프로토콜에 정의 된 추가 인터페이스뿐만 아니라 기본 유형의 구현을 처리 할 수있는 유연성을 제공합니다.
내가 놓칠 수있는 또 다른 분명한 방법이 있습니까?
예
예를 들어 UITableViewCell
프로토콜에 따라 셀을 반환 하는 공장이 있다고 가정 해 보겠습니다 . 프로토콜을 따르는 셀을 반환하는 일반 함수를 쉽게 설정할 수 있습니다.
class CellFactory {
class func createCellForItem<T: UITableViewCell where T:MyProtocol >(item: SpecialItem,tableView: UITableView) -> T {
//etc
}
}
나중에 유형과 프로토콜을 모두 활용하면서 이러한 셀을 대기열에서 빼고 싶습니다.
var cell: MyProtocol = CellFactory.createCellForItem(somethingAtIndexPath) as UITableViewCell
테이블 뷰 셀이 프로토콜을 따르지 않기 때문에 오류가 반환됩니다.
셀이 a UITableViewCell
이고 MyProtocol
변수 선언을 준수하도록 지정할 수 있기를 원합니까?
정당화
Factory Pattern에 익숙하다면 특정 인터페이스를 구현하는 특정 클래스의 객체를 반환 할 수 있다는 맥락에서 의미가 있습니다.
제 예에서와 같이 때때로 특정 객체에 적용 할 때 의미가있는 인터페이스를 정의하고 싶습니다. 테이블 뷰 셀의 내 예는 그러한 정당성 중 하나입니다.
제공된 유형이 언급 된 인터페이스와 정확히 일치하지는 않지만 팩토리가 반환하는 객체는 수행하므로 기본 클래스 유형 및 선언 된 프로토콜 인터페이스와 상호 작용하는 유연성을 원합니다.