Swansea had a glorious chance early on when Brynjar Gunnarsson’s clearance was deflected to Nathan Dyer, but Reading goalkeeper Adam Federici made a smart stop with his legs.
Swansea went ahead on 35 minutes when Andrea Orlandi hit a through ball to Darren Pratley, who finished superbly past Federici.
It was no more than Swansea deserved but, in first-half stoppage time, Dyer fouled Gylfi Sigurdsson 25 yards from goal and he curled an excellent equaliser into the bottom-left corner.
Reading came flying out of the traps at the start of the second and Grzegorz Rasiak fired wide.
Lee Trundle had the ball in the back of the net for Swansea late on but the goal was ruled out for offside as Reading hung on.