No Swift, como posso declarar uma variável de um tipo específico que esteja em conformidade com um ou mais protocolos?

No Swift, posso definir explicitamente o tipo de uma variável, declarando-a da seguinte maneira:

var object: TYPE_NAME

Se quisermos dar um passo adiante e declarar uma variável que esteja em conformidade com vários protocolos, podemos usar oprotocol declarativo:

var object: protocol<ProtocolOne,ProtocolTwo>//etc

E se eu quiser declarar um objeto que esteja em conformidade com um ou mais protocolos e também seja de um tipo de classe base específico? O equivalente ao Objective-C ficaria assim:

NSSomething<ABCProtocolOne,ABCProtocolTwo> * object = ...;

Em Swift, eu esperaria que fosse assim:

var object: TYPE_NAME,ProtocolOne//etc

Isso nos dá a flexibilidade de poder lidar com a implementação do tipo base, bem como com a interface adicionada definida no protocolo.

Existe outra maneira mais óbvia que eu possa estar perdendo?

Exemplo

Como exemplo, digamos que eu tenho umUITableViewCell fábrica responsável pelo retorno de células em conformidade com um protocolo. Podemos facilmente configurar uma função genérica que retorna células em conformidade com um protocolo:

class CellFactory {
    class func createCellForItem<T: UITableViewCell where T:MyProtocol >(item: SpecialItem,tableView: UITableView) -> T {
        //etc
    }
}

mais tarde, quero desenfileirar essas células enquanto aproveita o tipo e o protocolo

var cell: MyProtocol = CellFactory.createCellForItem(somethingAtIndexPath) as UITableViewCell

Isso retorna um erro porque uma célula de exibição de tabela não está em conformidade com o protocolo ...

Eu gostaria de poder especificar que a célula é umaUITableViewCell e está em conformidade com oMyProtocol na declaração da variável?

Justificação

Se você estiver familiarizado com oPadrão de fábrica isso faria sentido no contexto de poder retornar objetos de uma classe específica que implementam uma determinada interface.

Assim como no meu exemplo, às vezes gostamos de definir interfaces que fazem sentido quando aplicadas a um objeto específico. Meu exemplo da célula de exibição de tabela é uma dessas justificativas.

Embora o tipo fornecido não esteja exatamente em conformidade com a interface mencionada, o objeto que a fábrica retorna o faz e, portanto, eu gostaria da flexibilidade de interagir com o tipo de classe base e a interface de protocolo declarada

questionAnswers(5)

yourAnswerToTheQuestion