I would also recommend a rewrite. And will have to disagree to just copying and pasting some of the older code. When Swift 3 came out, there were a large quantity of function name changes all throughout the SDK. Apple also advised that developers write Swift code with preferred naming schemes (e.g. the 'ed' and 'ing' rules).
While I have steadily moved my app through all versions of Swift (it's really best to stay up-to-date), I can definitely say that the most challenging was transitioning to Swift 3. Swift 4's changes were not too bad and Xcode's fix actions could tend to most of them. Migrating to Swift 5 was then very easy.
Over the years I've also re-looked at basically everything I wrote and performed refactors as-needed. For example, my Swift 1 apps were organized just like their prior Objective-C versions. I ended up using classes for almost everything. And still had lots of loops in the app. These days, my apps are completely re-organized and make heavy use of protocols and value types. I also leverage 'map', 'filter', etc. as much as possible.