Actually makes the code somewhat simpler in many ways! And uses fewer Arduino pins. Using the shift register, you can put the individual controls for each electromagnet as bits in a byte variable, and write them into the shift register so that they all update simultaneously.
They use less current, so are within the capability of the TPIC6B595 which then runs cooler than a ULN2x03.
("ULN2x03" means either a ULN2803 which controls 8 outputs, or a ULN2003 which controls 7.)