Alan has tried three different ways to update large code bases to the latest Swift version. In the end, he feels using multiple Swift versions is probably the best approach, but it depends on several factors like team size and your tolerance for lost productivity. What do you think?
Safely supporting new versions of Swift by Alan
I've used UserDefaults quite a bit in my apps, and not just for storing preferences. I've found this simple API to be invaluable and wonder how many developers implement a more robust solution than needed. I've used it to share data in an app group, store data, and set user preferences. All have worked flawlessly. Sure UserDefaults is a bit limited, but I agree with John that you need to look closely at your use case and you may find that it's is actually the perfect API for you.
The power of UserDefaults in Swift by John Sundell