I am converting an old Swift 2 project to Swift 3. In the previous version I registered default values for unset user defaults in the AppDelegate like this:
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = [
"stringKey" : "",
"intKey" : 50
]
defaults.registerDefaults(defaultValues as! [String : AnyObject])
Xcode was helping to convert it, but the autoconvert in Xcode wasn't working for the following error:
Heterogenous collection literal could only be inferred to '[String : Any]'; add explicit type annotation if this is intentional
The auto correct finally did work, but by that time I had written most of this question so I will just add the answer below rather than deleting the question. (Also, the auto convert suggestions were more wordy than the answer I am providing below.)
Notes
- Here is an answer for registering a single type in Swift 3.
- I am talking about registering, not setting, multiple default values.
Here is the syntax for Swift 3. I am including it in its context in the
AppDelegate.Remember that this does not set the values, it only provides some initial defaults for when the user has not yet set them.