Former Basle striker Breel Embolo marked his return to St Jakob Park with the opening goal and Admir Mehmedi curled home a fine second for the Swiss on the half-hour mark.
Portugal, still missing captain Cristiano Ronaldo to the injury he suffered in the Euro 2016 final win over France, could find no way back as they came out second best in the battle between the top two teams in Group B.
Switzerland took the lead in the 24th minute through Embolo’s header.
The 19-year-old, a familiar goalscorer on this ground before swapping Basle for Schalke over the summer, pounced to nod home after Portugal goalkeeper Rui Patricio had pushed out Ricardo Rodriguez’s free-kick.
It became 2-0 just six minutes later when Mehmedi linked up with Haris Seferovic following a rapid counter-attack before firing a pinpoint effort into the top corner from near the edge of the box.
Portugal boss Fernando Santos made a double substitution at the break, but it did little to change his side’s fortunes and Switzerland midfielder Blerim Dzemaili should have killed the game off with 20 minutes to go only to fluff his lines.
Nani missed a similarly gilt-edged chance for Portugal with eight minutes left when he headed Ricardo Quaresma’s cross against a post.
A goal then could have made things interesting, especially as Switzerland saw Arsenal playmaker Granit Xhaka sent off in stoppage time after picking up a second yellow card, but the home side held on relatively comfortably for the points.
France, meanwhile, were left frustrated following a goalless draw from their opening Group A match in Belarus.
Les Bleus, beaten finalists as hosts of Euro 2016, had plenty of possession, but could not find a way past the home defence.
In Group H, a brace from Everton forward Romelu Lukaku helped secure a 3-0 win in Cyprus for new Belgium manager Roberto Martinez.
The former Toffees boss saw his side beaten by Spain in Brussels last week, but the Red Devils’ delivered the required display in Nicosia.
Lukaku, who played for Martinez at Goodison Park, put the visitors in front on 14 minutes with a diving header and produced another close-range finish to nod in a second on the hour.
Yannick Carrasco slotted in a third with nine minutes left, converting a pass from Chelsea playmaker Eden Hazard.
Sweden started life after Zlatan Ibrahimovic with a 1-1 draw against the Netherlands in their Group A match at the Friends Arena.
The Dutch had dominated large spells of the first half, but found themselves behind on 43 minutes when Marcus Berg chipped the ball over the goalkeeper from the edge of the penalty area.
The Dutch levelled on 67 minutes when captain Wesley Sneijder slotted in after Daryl Janmaat’s shot was saved — and thought they had won it in stoppage time with a header from substitute Bas Dost, which was ruled out for what looked minimal contact with the defender.
Elsewhere in Group A, Bulgaria snatched a dramatic 4-3 win over Luxembourg in Sofia, where there were two goals in stoppage time.
Florian Bohnert looked to have earned the minnows a shock draw after Aurelien Joachim had earlier scored twice.
Bulgaria went ahead through Dimitar Rangelov on 16 minutes, but found themselves fighting back with a goal from Marcelinho (66) and a free-kick by Ivelin Popov (80) before Bohnert’s late strike and then Aleksandar Tonev sparked wild celebrations from the home supporters.
Bosnia-Herzegovina got their Group H campaign off to a winning start with a comfortable 5-0 win over Estonia in Zenica.
Emir Spahic (7) headed the hosts in front, with Roma striker Edin Dzeko (22) adding a second from the penalty spot. Further goals from Haris Medunjanin (71), Vedad Ibisevic (83) and a second by Spahic in stoppage time completed the rout.
Gibraltar scored an historic first goal in a World Cup qualifier, but were well beaten 4-1 by Greece at Estadio Algarve.
Kostas Mitroglou (10) put Greece ahead, before Liam Walker, who once had a spell at English club Portsmouth, equalised in the 25th minute.
However, it was not long before the Greeks regained control, as Scunthorpe defender Scott Wiseman (43) put through his own net.
Greece extended their lead with two more quick goals before half-time through Kostas Fortounis and Vassilis Torosidis.
In last night’s other Group B fixtures, Latvia won 1-0 in Andorra with a header from Valerijs Sabala at the start of the second half, while the Faroe Islands held Hungary to a goalless draw in Torshavn
Albania snatched a late 2-1 win over Macedonia as they resumed the Group G qualifier which was abandoned due to torrential rain in Shkoder on Monday.
As the teams played out the final quarter-of-an-hour, the scores level at 1-1, Bekim Balaj netted with just one minute left when he glanced in from a free-kick to secure all three points for the hosts.