Syntactically correct Swift code does not necessarily mean great Swift code.
Programming in Swift requires you to adhere to some linguistic and other rules. Swift 3.0 brought a plethora of changes and you must wrap your head around the new rules to implement them correctly.
Here are a couple of resources to make the transition easier:
Also, you may want to check out my course Design Patterns in Swift: Creational on Pluralsight. I’m currently working on the next part of the Design Patterns in Swift series.