I suggest have an int with the total amount that will be spawned in that wave and as they are spawned, bind OnDestroy to an event that will ++ an int. When the incrementing int == total amount, then move to next wave. Like this the only way you can move to next wave is if you spawn and destroy at least the amount you intended to spawn in that wave.
If you have a boss that if killed wave is over early, then something like a dispatcher passing a string could be enough.
I would also suggest you drop that custom loop with delay and use a timer.
Then its just a matter of telling it how many waves you want to spawn.
A bit off topic but… you could also make it dependent on a data table in case you plan on spawning mixed classes and / or other wave like events. Each row with the data for each waves:
Hope it helps.