Ios 使用Swift 3在UserDefaults中注册多个值类型

Ios 使用Swift 3在UserDefaults中注册多个值类型,ios,swift,nsuserdefaults,userdefaults,Ios,Swift,Nsuserdefaults,Userdefaults,我正在将一个旧的Swift 2项目转换为Swift 3。在以前的版本中,我在AppDelegate中注册了未设置的用户默认值,如下所示: let defaults = NSUserDefaults.standardUserDefaults() let defaultValues = [ "stringKey" : "", "intKey" : 50 ] defaults.registerDefaults(defaultValues as! [String : AnyObject]

我正在将一个旧的Swift 2项目转换为Swift 3。在以前的版本中,我在
AppDelegate
中注册了未设置的用户默认值,如下所示:

let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = [
    "stringKey" : "",
    "intKey" : 50
]
defaults.registerDefaults(defaultValues as! [String : AnyObject])
Xcode正在帮助转换它,但Xcode中的自动转换无法处理以下错误:

异类集合文字只能推断为“[String: 任何]”;如果有意这样做,请添加显式类型注释

自动更正最终成功了,但那时我已经写了这个问题的大部分内容,所以我将在下面添加答案,而不是删除这个问题。(此外,自动转换建议比我下面提供的答案更冗长。)

注释

  • 用于在Swift 3中注册单个类型
  • 我说的是注册而不是设置多个默认值

    • 以下是Swift 3的语法。我将它包含在
      AppDelegate
      的上下文中

      @UIApplicationMain
      class AppDelegate: UIResponder, UIApplicationDelegate {
      
          var window: UIWindow?
      
          override init() {
              let defaults = UserDefaults.standard
              let defaultValues : [String : Any] = [
                  "stringKey" : "",
                  "intKey" : 50
              ]
              defaults.register(defaults: defaultValues)
              super.init()
          }
      
          // ...
      }
      

      请记住,这不会设置值,它仅在用户尚未设置值时提供一些初始默认值。

      以下是Swift 3的语法。我将它包含在
      AppDelegate
      的上下文中

      @UIApplicationMain
      class AppDelegate: UIResponder, UIApplicationDelegate {
      
          var window: UIWindow?
      
          override init() {
              let defaults = UserDefaults.standard
              let defaultValues : [String : Any] = [
                  "stringKey" : "",
                  "intKey" : 50
              ]
              defaults.register(defaults: defaultValues)
              super.init()
          }
      
          // ...
      }
      
      请记住,这不会设置值,它仅在用户尚未设置值时提供一些初始默认值