¿Por qué no puedo pasar un Protocol.Type a un parámetro genérico T.Type?

Estaba trabajando con Swinject y un problema me está molestando. He estado atrapado en esto durante casi un día entero. Sospecho que esto se debe a que Swift es un lenguaje escrito meticulosamente, pero no estoy completamente seguro.

Resumí mi problema en este patio de recreo

protocol Protocol {}

class Class: Protocol {}

let test: Protocol.Type = Class.self

func printType(confromingClassType: Protocol.Type) {
    print(confromingClassType)
}

func printType<Service>(serviceType: Service.Type) {
    print(serviceType)
}

print(Class.self) // "Class"
printType(serviceType: Class.self) // "Class"
print(test) // "Class"
printType(confromingClassType: test) // "Class"

printType(serviceType: test) // "note: expected an argument list of type '(serviceType: Service.Type)'"

Intenté diferentes soluciones como test.self o type (of: test) pero ninguna de ellas funciona.

Entonces, ¿no puedo llamar a una función con un parámetro genérico proporcionado como variable?

Respuestas a la pregunta(2)

Su respuesta a la pregunta