used type protocol only has generic constraint because associated generics types swift protocols

generics - type - protocol generic swift



Tipo genérico conforme a un protocolo en Swift. (3)

¿Es posible exigir que las instancias específicas de tipos genéricos se ajusten a un protocolo en Swift?

Por ejemplo, digamos que tengo un tipo genérico llamado Thing<T> . Quiero que Thing<Int> ajuste a un determinado protocolo, pero no a Thing<T> .


Bueno, puede que no sea demasiado oneroso, y puede que sea lo suficientemente obvio como para que lo hayas ignorado, pero podrías hacer una "ejemplificación específica de un tipo genérico", como:

class ThingOfInt : Thing<Int>, SpecialIntProtocol { // implement SpecialIntProtocol (if it isn''t already // implemented in an extension) }

O con un poco más de generalidad:

class IntThing<T:IntegerType> : MyThing<T>, SpecialIntProtocol { }


En Swift 2.0 puedes ampliar protocolos y tipos.

Cuando lo extiendes puedes agregar un genérico where restricciones. Solo los tipos que coincidan con esa regla podrán usar esa funcionalidad

Ejemplo :

public struct Thing<T> { let x: T } extension Thing where T : IntegerType { func giveMeInt () -> T { return x } } let a = Thing<Int>(x: 10) a.giveMeInt() let b = Thing(x: 10.1) //b.giveMeInt() // Error

De esta manera puede agregar una funcionalidad adicional al tipo Thing<Int>

No conozco una forma de ajustarme a un protocolo en la extensión, pero no tiene mucho sentido.

Limitación: genérico where T : se puede usar con protocolos y clases, por eso no podemos especificar Int allí