$reverse(0) gives no output in your alias.
if (<value>) is $false if <value> is 0, $null or $false
You don't need that if check anyway, because it is already achieved through the while loop. A /while is basically an /if check which repeats the body of the while loop until the expression evaluates to $false.
Btw identifiers delimit tokens by commas, not by spaces, so inside your alias, the entire string is stored in $1, using $1- is not necessary. And it's nasty to put that $len in your while condition, with every iteration it must calculate the length of the string.
Additionally, you are only declaring the local variable %string inside the while loop, meaning if no input was given, and you had a global variable %string, it would give the value of that instead of $null. Even if you would give an input, with the very first iteration in the while loop, it would still mess things up because %string would evaluate to the value of the global %string and be appended to the local variable %string.
But anyway, I guess you didn't read hixxy's post very carefully because it states at the end:
"Not interested in workarounds.. I can make them if need be."