Если пропишешь протокол, можешь передавать то что реализует его. Но дженерик в функции не будет обрабатывать разные типы. Он может обрабатывать любой тип но только 1. Тобишь ты не можешь написать два параметра с типом Т и туда влепить Инт и Стринг. Или Инт или Стринг.