Cómo extender un protocolo en Swift


En Swift, ¿cómo definimos un protocolo que extiende o especializa un protocolo base? La documentación no parece dejar esto claro.

Tampoco está claro, ¿los protocolos Swift se ajustan/extienden al protocolo NSObject? Esta es una pregunta interesante, ya que sugeriría si Swift utiliza vtable o envío basado en mensajes para llamar a métodos de protocolo.

Author: rmaddy, 2014-09-09

2 answers

Protocol inheritance utiliza la sintaxis de herencia regular en Swift.

protocol Base {
    func someFunc()
}

protocol Extended : Base {
    func anotherFunc()
}

Los protocolos Swift no se ajustan por defecto a NSObjectProtocol. Si elige que su protocolo se ajuste a NSObjectProtocol, limitará su protocolo a solo ser utilizado con clases.

 33
Author: Connor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-09 00:59:27

La sintaxis es la misma que si estuviera declarando una clase que heredó de una superclase.

protocol SomeProtocol { }

protocol SomeOtherProtocol: SomeProtocol { }

Y no, no lo hacen. Si desea que su protocolo también se ajuste a NSObjectProtocol, puede suministrar varios protocolos para que su nuevo protocolo se ajuste a esto.

protocol SomeOtherProtocol: SomeProtocol, NSObjectProtocol { }
 8
Author: Mick MacCallum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-09 00:58:10