Aunque ya esté respondido quiero comentar una cosa, si os dais cuenta el método prepareForSegue devuelve void, por lo que no tiene ninguna posibilidad de devolver un valor que provoque que el runtime no ejecute la transición entre vistas. Todos los procesos del API tienen un método inicial que devuelven BOOL para hacer justamente lo que querías, (y todos empiezan por should), así que si alguien que lea esto vuelve a tener un problema similar que busque el método que empieza por should para abortar que el proceso se ejecute.
Saludos,