Miałem też ten problem i znalazłem obejście dla mojego przypadku.
W tym artykule autor ma ten sam problem
https://www.iphonelife.com/blog/31369/swift-programming-101-generics-practical-guide
Wydaje się więc, że problem polega na tym, że kompilator musi jakoś wywnioskować typ T. Ale nie wolno po prostu używać generycznego <type> (params ...).
Zwykle kompilator może szukać typu T, skanując typy parametrów, ponieważ w wielu przypadkach jest to miejsce, w którym T jest używany.
W moim przypadku było trochę inaczej, ponieważ typem zwracanym przez moją funkcję był T. W twoim przypadku wygląda na to, że w ogóle nie użyłeś T w swojej funkcji. Chyba właśnie uprościłeś przykładowy kod.
Mam więc następującą funkcję
func getProperty<T>( propertyID : String ) -> T
A w przypadku np
getProperty<Int>("countProperty")
kompilator podaje mi błąd:
Nie można jawnie specjalizować funkcji ogólnej
Aby więc udostępnić kompilatorowi inne źródło informacji, z którego będzie mógł wywnioskować typ T, musisz jawnie zadeklarować typ zmiennej, w której zapisywana jest wartość zwracana.
var value : Int = getProperty("countProperty")
W ten sposób kompilator wie, że T musi być liczbą całkowitą.
Myślę więc, że ogólnie oznacza to po prostu, że jeśli określisz funkcję ogólną, musisz przynajmniej użyć T w typach parametrów lub jako typ zwracany.