A 90th minute equaliser from Andy Yiadom helped Reading to end a run of four consecutive defeats, snatching a point at the death to cancel out Borja Baston’s early strike.
Coming into the match on a run of four straight defeats, the Royals made a far from ideal start to the match as Swansea took the lead with just three minutes on the clock.
Andre Ayew swung a cross into the back post which was met by Borja Baston who had an easy finish as he headed past Rafael to open the scoring.
George Puscas then squandered a golden opportunity to level the match in the 13th minute. Following a corner, the ball was drilled in low and fell kindly for Puscas after Jordan Obita missed the ball, but the Romanian striker somehow fired the ball over the bar from just four yards out.
Jose Gomes was forced into a change with just over 20 minutes played and opted for a change in shape as the injured Tyler Blackett was replaced by forward Lucas Joao who partnered Puscas and Lucas Boye in attack as the Royals transitioned from three to four at the back.
Reading had to survive some pressure as the in form hosts burst forward but Michael Morrison put in a crucial tackle to block Jay Fulton’s strike inside the box.
It took 35 minutes for the visitors to have their first effort on target, with Lucas Joao hitting a speculative shot from distance which was watched well by Swansea goalkeeper Freddie Woodman.
Captain Liam Moore defended well against Ayew to show him down the wing instead of letting him cut inside onto his stronger left foot as the winger skewed a shot into the side netting from an acute angle.
Rafael had to rush off his line to make a vital save from Ayew after the Swans capitalised on a loose pass from Puscas to hit the Royals on the counter attack as they came close to doubling their advantage.
Reading’s half was almost made worse when Lucas Boye tugged the shirt of Matt Grimes, and with the Argentine forward already on a yellow card, he was shown some respite by the referee who gave him a final warning instead of giving him his marching orders.
With Boye close to getting a second yellow, Gomes withdrew him at half-time, opting to bring on Josh Barrett in his place.
Reading enjoyed a good period in the game early in the second half as the substitute of Barrett gave the Royals a much needed renewed vigour and energy in attack.
With just 17 minutes left, Lucas Joao came close to latching onto an under hit back pass but Swansea got away with their error as Woodman just beat him to the chase.
Despite an improved spell in the second half from Reading as they controlled more of the ball, they struggled to create chances as they were limited to optimistic long range efforts on the Swansea goal.
However, the Royals found another late goal after scoring in the 99th minute in midweek against Wolves, Yiadom struck with just a minute of normal time remaining.
Joao played the ball to Yiadom who struck the ball with power past Woodman to level the score late in the game.
The draw sees Reading stay in 20th position in the Championship, while Swansea missed out on the chance to move top of the table.
Reading have another two tricky fixtures as they prepare to host Fulham on Tuesday evening at the Madejski Stadium before travelling to Bristol City next weekend.
Swansea City: Woodman, Roberts, van der Hoorn, Rodon, Naughton, Fulton, Grimes, A Ayew, Celina, Byers, Baston.
Subs: Dyer, Carroll, Surridge, Wilmot, Dhanda, Mulder, Garrick
Reading: Rafael, Moore, Morrison, Blackett (Joao 21′), Yiadom, Swift, Rinomhota, Ejaria, Obita, Puscas, Boye (Barrett 45′).
Subs: Walker, McIntyre, Olise, Richards, Pele, Joao, Barrett.
Goals: Baston 3′, Yiadom 90′