Opaque Type Vs Protocol In Swift Associated Type Generics Ios Icode