Faf du Plessis’s side have endured a torrid campaign so far, losing their first three matches and then picking up one point from a rain-ruined match against the West Indies.
Afghanistan, who have lost all three of their matches in England and Wales, made a bright start but their middle order collapsed spectacularly and just three of their players reached double figures.
There was little sign of the carnage to come when Hazratullah Zazai and Noor Ali Zadran put on 39 runs for the first wicket.
After a short rain delay Zazai was the first to go, caught by Rassie van der Dussen for 22 off the bowling of paceman Kagiso Rabada.
Chris Morris trapped Rahmat Shah lbw for six and Afghanistan were 69-2 after 20 overs when the heavens opened again and the covers came on, with officials opting to reduce the match to 48 overs a side.
When play resumed Hashmatullah Shahidi was out without any addition to the score, caught in the slips by Du Plessis off the bowling of Andile Phehlukwayo for eight.
Leg-spinner Tahir bowled Zadran for 32 with his first ball and then caught Asghar Afghan off his own bowling for nought in the same over to plunge Afghanistan into deep trouble.
Mohammad Nabi became the third Afghan batsmen to lose his wicket in the space of seven balls when he was bowled by Phehlukwayo.
When Gulbadin Naib was caught by Aiden Markram of the bowling of Tahir, Afghanistan were teetering on the brink of disaster at 77-7.
Rashid Khan struck 35 from 25 balls, with six fours, but even his late flourish could only lift the score to 125, which looks hopelessly inadequate.
"We did have a tough start to the tournament, but we have belief," said Tahir, who took 4-29. "We have been playing really good cricket in the previous two years.
"We’ve got confidence but we need to show it in the middle. We were really up for today’s game and we need to carry on and put in a performance in the next games."