类型安全的用户默认值

以前,我们只是通过使用字符串键将数据存储在UserDefaults中。 每当我们需要照顾数据类型时setBool(_:forKey:_)和co是解决方案。

可是等等?! 如果您需要获取给定密钥的值怎么办? 您需要遍历代码库并检查在那里存储了什么类型:它是Int吗? 或数组。 这是浪费时间,甚至如此危险:您可以在此处存储Bool,其他人可以存储任何其他类型。 但是您可以确定这是一个布尔型,并且解开nil可选项可能会导致崩溃。

我为什么过去说话? 因为自Swift 3推出以来,一个不错的解决方案就可以实现。 setValue(_:for key:_)方法现在接受Any值,不再接受AnyObject :这使事情变得更加容易。 让我们看看如何:

使用泛型,我们可以定义一个简单的DefaultKey结构,该结构包含要存储类型键名信息。

这样,您可以轻松地在常量文件中定义DefaultKey集

完成此操作后,您可以轻松地为UserDefaults构建通用扩展,如下所示

这个小界面可让您获取或设置存储的值,而无需关心值的类型

如果您尝试为LaunchesKey存储字符串会怎样?

实际上,此界面会自动提醒您应为定义的键存储什么类型。 检查我的Github存储库上的完整代码:https://github.com/dalu93/Defaults

更新:使用Swift 4现在可以实现通用下标。 有关更多信息,请查看GitHub上的develop分支。