Derby came from behind to edge a victory that closed the gap between the chasing back and the top six, despite the Royals scoring twice at a ground which had not conceded a single goal since September.
Swift's opener was cancelled out when Darren Bent deflected Richard Keogh's firm drive past Al Habsi and second half goals from Tom Ince and Will Hughes looked to have handed the hosts victory. Yakou Meite pulled one back though and County were desperate in their attempts to defend their lead through six minutes of injury time, but the home side held on for the win.
Royals boss Jaap Stam handed Tiago Ilori his Royals debut at the iPro Stadium, while skipper Paul McShane returned to the starting line-up following hand surgery. Roy Beerens was absent from the squad, but goalkeeper Anssi Jaakkola was back in the group following injury - named on the bench in place of Stuart Moore as Al Habsi's understudy.
In the second minute, the Rams carved out an early opportunity when Tom Ince's inswinging cross was headed back by Russell at the far post but Reading were able to clear. Moments later, an up and under from Ince forced Ali to pat the ball to safety over the head of a loitering Bent.
Reading's first attack came on the break and John Swift, who weaved his way forward through the midfield and teed up Kermorgant for a shot. But a well-timed slide from Marcus Olsson denied the Frenchman a clean strike just inside the Derby area.
McCleary did get a shooting opportunity soon after, running onto a Kermorgant flick and driving at Alex Pearce only to arrow high over the bar with a left-footed effort.
And Jaap Stam's men were starting to dominate proceedings when they deservedly took the lead. A wonderful burst forward from Liam Kelly saw him dart into the Derby box down the right and fizz a low cross into the middle where Swift was on hand to sidefoot past Scott Carson.
It was the first goal County had conceded on home turf since September, and the Royals almost had a second when the ball was worked from right to left by McCleary and Kermorgant to Williams' whose arrowed shot was well held by Casrson.
Ilori cut out a dangerous Bent cross from the right at the other end on the half hour mark and a superb slide tackle from Gunter took the ball off the toes of Russell looking to break onto a threaded ball through the middle.
McCleary tested Carson's handling when he cut in from the right and drive low at the near post and McCleary was the architect soon after when a wonderful crossfield ball found an overlapping Gunter bursting into the box, but the full back couldn't bring the ball under control as he bore down on Carson's goal.
The Rams were level before the break though. The ball was worked to the right by Ince and Keogh drove hard at goal, the ball simply struck the body of an unknowing Bent and flew into the back of the Royals net from close range.
Steve McClaren's men were enjoying their best spell of the half and threatened to take the lead as half-time approached, but Russell missed his kick after springing the offside trap and the ball span wide of the right posy and behind for a goal kick.
Half-time: Derby 1-1 Reading
After an entertaining first half, the second half began with plenty of vigour from both sides - each seeking a win and refusing to sit back. Kermorgant tried his luck first, Carson down low to his right to push it around his post.
From the resulting corner, Kelly picked out Moore in the middle but his header was easy for Carson to gather.
And they took the lead just after the hour. Reading lost the ball playing out from the back and County capitalised when Moore failed to step in and clear the danger. Hughes fed Ince in space and the in-form forward slotted it wide of Al Habsi from eight yards out.
Reading looked to respond immediately and Williams won a free kick which Swift smashed wide of the target. But the hosts had a third when the a break down the left saw the ball ricochet kindly for Will Hughes who had time and space to pick his spot in the bottom left corner for 3-1.
Stam made a double change, bringing both Yakou Meite and Dominic Samuel onto the pitch and Meite pulled one back with 10 minutes to go. Kelly's floated corner found an unmarked Meite who placed his header past Carson for 3-2.
Moments later, Kelly was threaded in but a last gasp tackle from Russell prevented the Academy graduate from troubling Carson from a narrow angle. Then McCleary provided a cross from the right that found its way to Obita - the left-back missed his kick then aimed an overhead wide of the target.
In the last minute of the ninety, Meite showed a clean pair of heels to race down the left, but his low cross was hacked clear. Six minutes of added time were signalled and Reading were pressing hard for an equaliser, an inswinging corner dropping just wide in a crowded Derby box.
Derby threw on another defender in an attempt to hold the Royals' late charge at bay. And Reading's efforts were only hindered further when Obita received a second yellow for tugging back Hughes.
Al Habsi went up for two late free kicks but Derby held on for the victory that closed the gap on the top six.
Full-time: Derby 3-2 Reading
Derby County: Carson, Bryson (Christie 88), Baird, Pearce, Keogh (c), De Sart, Hughes, Olsson, Russell (Shackell 90), Ince, Bent (Vydra 88).
Subs: Roos, Camara, Hanson, Vernam.
Goals: Bent (37), Ince (63), Hughes (75)
Yellow: Bryson, Russell, Ince
Reading: Al-Habsi, Gunter (c), Obita, McShane, L.Moore (Meite 75), Ilori, Kelly, Swift (Samuel 75), Williams, McCleary, Kermorgant.
Subs: Jaakkola, Watson, Blackett, Evans, Van den Berg.
Goals: Swift (16), Meite (80)
Yellow: Swift, Obita