在 UserDefaults 中注册多个值类型 Swift 3
Register multiple value types in UserDefaults with Swift 3
我正在将一个旧的 Swift 2 项目转换为 Swift 3。在以前的版本中,我在 AppDelegate
中注册了默认值,用于未设置的用户默认值,如下所示:
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = [
"stringKey" : "",
"intKey" : 50
]
defaults.registerDefaults(defaultValues as! [String : AnyObject])
Xcode 正在帮助转换它,但 Xcode 中的自动转换因以下错误而不起作用:
Heterogenous collection literal could only be inferred to '[String :
Any]'; add explicit type annotation if this is intentional
自动更正终于奏效了,但那时我已经写完了这个问题的大部分内容,所以我只会在下面添加答案而不是删除问题。 (此外,自动转换建议比我在下面提供的答案更冗长。)
备注
- Here is an answer 用于在 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 2 项目转换为 Swift 3。在以前的版本中,我在 AppDelegate
中注册了默认值,用于未设置的用户默认值,如下所示:
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = [
"stringKey" : "",
"intKey" : 50
]
defaults.registerDefaults(defaultValues as! [String : AnyObject])
Xcode 正在帮助转换它,但 Xcode 中的自动转换因以下错误而不起作用:
Heterogenous collection literal could only be inferred to '[String : Any]'; add explicit type annotation if this is intentional
自动更正终于奏效了,但那时我已经写完了这个问题的大部分内容,所以我只会在下面添加答案而不是删除问题。 (此外,自动转换建议比我在下面提供的答案更冗长。)
备注
- Here is an answer 用于在 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()
}
// ...
}
请记住,这不会设置值,它只会为用户尚未设置的值提供一些初始默认值。