Complementando a resposta de @Thomas Schar. A mágica do protocolo Swift vem da extensão.
- Os protocolos Swift podem obter implementações por meio da extensão (Swift
2). A interface Java 8 pode ter implementações padrão, mas não pode ser feita "retroativamente".
- No Swift, você pode "retroativamente" adicionar requisitos de protocolo (e
suas implementações, se necessário) a qualquer classe ou estrutura.
- Os protocolos Swift não seguem o padrão de personalização genérico (isto é, <..>), mas um esquema de tipealias (isto é, Tipos Associados). Pode ser confuso no início, mas pode evitar a
"cegueira angular" em alguns casos.
- O Swift possui uma correspondência de padrões de tipo avançada, permitindo ser muito específico sobre onde e como os requisitos e extensões de protocolo são aplicados. Pode ser confuso quando vem do Java, mas tem muito poder.
- Um protocolo rápido pode ser composto por uma propriedade / parâmetro (isto é, celebrator: protocol)
Uma coisa que me fez coçar a cabeça por algumas horas é que nem todos os protocolos podem ser usados como tipos de propriedade. Por exemplo, se você possui um protocolo com typealias, não pode usá-lo diretamente como um tipo de propriedade (faz sentido quando você pensa sobre isso, mas, vindo do Java, realmente queremos ter uma propriedade como userDao: IDao).