Swiatek, seeded seventh, improved to 5-3 against Svitolina, who had narrowed their head-to-head record with two wins over the Polish star this year.
In Thursday's final, Swiatek will play Australian Open champion Elena Rybakina of Kazakhstan, who is seeded two.
In a match delayed more than an hour by rain, Swiatek raced to a 4-0 lead in the opening set, in which Svitolina held serve just twice.
The Ukrainian made Swiatek work to serve it out, saving a pair of set points in the final game of the first.
Energized, she raced through the second set before Swiatek rebounded in the third, breaking Svitolina to love for a 5-3 lead before holding serve to secure the win.
"Against Elina it's always tough, so I'm happy that I won this one," said Swiatek, a six-time Grand Slam champion who will be chasing her first title since she won in Seoul almost a year ago.
"Especially that I came back in the third set playing better. So, yeah, that's for sure a big improvement. I'm proud of myself."
