rethrows indica que una función solo lanza si alguno de sus argumentos closures lanza. De lo contrario, se puede llamar sin try:
func aplicar(_ valor: T, _ transform: (T) throws -> T) rethrows -> T {
try transform(valor)
}
// Sin error: no necesita try
let doble = aplicar(5) { $0 * 2 }
print(doble) // 10
