31

NSUserDefaults似乎不再是 iOS 10 SDK 中的一个类:

let defaults = NSUserDefaults.standardUserDefaults()

这无法编译。这个类被删除了吗?

(这是一个规范的问答对,以防止重复问题泛滥)

4

3 回答 3

47

NSUserDefaults已重命名为UserDefaults. standardUserDefaults()已重命名为standard().

let defaults = UserDefaults.standard

这现在有效。

预发布文档链接

于 2016-06-13T20:17:26.653 回答
20

为了更准确地在 Swift-3 中使用 UserDefaults :-

       //To save the string 
       let userDefaults = UserDefaults.standard
       userDefaults.set( "String", forKey: "Key")

       //To retrieve from the key
       let userDefaults = UserDefaults.standard
       let value  = userDefaults.string(forKey: "Key")
       print(value)
于 2016-11-24T12:23:08.107 回答
16

@JAL 的回答是正确的,但可能过于具体。

许多API 在 Swift 3 中被重命名。大多数 Foundation 类型(NSUserDefaults其中)都失去了NS前缀,并且重命名了它们的方法以反映Swift 3 API 指南。Foundation 还用 Swift 原生值类型(、、、等) “替换”*了一堆基本数据类型类(NSURL、、、NSIndexPath等)。方法重命名也适用于您在应用程序中使用的任何其他 Cocoa / Cocoa Touch API。NSDateURLIndexPathDate

一条一条、一条一条地处理这些问题,肯定会发疯。将项目移动到 Swift 3 时,您要做的第一件事是从菜单栏中选择Edit > Convert > To Current Swift Syntax 。这将一次应用所有更改,包括一行代码受到多个更改影响的情况(因此单独解决它们可能无法让您到达您认为的目标)。

*我将“替换”放在引号中,因为在您可能需要它们的情况下,相应的NS类仍然存在,但任何使用它们的 API 都引用新的值类型:例如,tableView(_:cellForRowAt:)现在需要一个IndexPath,而不是一个NSIndexPath

于 2016-06-14T00:53:02.720 回答