在Xcode 8和iOS 10中使用NSUserDefaults
NSUserDefaults
不再是iOS 10 SDK中的一个类:
let defaults = NSUserDefaults.standardUserDefaults()
这不能编译。 这个class级被删除了吗?
(这是一个规范的问答对,防止重复问题的泛滥)
NSUserDefaults
已被重命名为UserDefaults
。 standardUserDefaults()
已经被重命名为standard()
。
let defaults = UserDefaults.standard
这现在工作。
预发布文档链接 。
为了更精确地使用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)
@日航的答案是正确的,但也许太具体。
许多 API在Swift 3中被重命名。大多数基础types(其中的NSUserDefaults
)都丢失了NS
前缀,并重命名了它们的方法以反映Swift 3 API指南 。 Foundation还用Swift原生值types ( URL
, IndexPath
, Date
等)“replace”一些基本的数据types类( NSURL
, NSIndexPath
, NSDate
等)。 重命名方法也适用于您在应用程序中使用的任何其他Cocoa / Cocoa Touch API。
逐一处理这些问题,是一个疯狂的肯定的方式。 将项目移动到Swift 3时要做的第一件事是从菜单栏中selectEdit> Convert> To Current Swift Syntax 。 这将同时应用所有更改,包括一行代码受多个更改影响的情况(因此,单独解决这些更改可能不会使您获得您想要的位置)。
*我将“replace”放在引号中,因为相应的NS
类仍然存在于您可能需要它们的情况下,但是使用它们的API引用了新的值types:例如tableView(_:cellForRowAt:)
现在需要IndexPath
,而不是一个NSIndexPath
。