Если вы хотите, чтобы числа соответствовали степеням двух, то это должно работать хорошо.
int y = 1 << arc4random_uniform(3);
Если вы хотите пропустить 3 по какой-то другой причине, то это, вероятно, больше запутает то, что вы делаете, чем. В этом случае будет достаточно чего-то более простого.
do {
int y = arc4random_uniform(4) + 1;
} while (y == 3);