2016-06-13 97 views
29

NSUserDefaults NSUserDefaults的使用不再似乎是一类在iOS的10 SDK:在Xcode 8和iOS 10

let defaults = NSUserDefaults.standardUserDefaults() 

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

(这是一个典型Q &一对,以防止重复的问题洪水)

回答

47

NSUserDefaults已更名为UserDefaultsstandardUserDefaults()已更名为standard()

let defaults = UserDefaults.standard 

现在可以工作。

Pre-release documentation link

+6

看起来像我要去有一些有趣的重写过去的一些代码。 –

+0

@JAL - 一旦我们使这些NSUserDefault更改符合Swift 3/ios10/Xcode 8,我们所有NSUserDefaults的当前值是否会持续? – Joe

+0

@Joe是的,所有的数据将会持续存在。这些只是类和函数名称的变化。 – JAL

16

@日航的答案是正确的,但也许太具体。

很多API的斯威夫特得到了更名3.最基础的类型(其中NSUserDefaults)双双失去了NS前缀和有自己的方法renamed反映Swift 3 API Guidelines。基金会还 “取代” *一帮其基本数据类型类(NSURLNSIndexPathNSDate等)与雨燕本地value typesURLIndexPathDate等)。重命名方法也适用于您在应用中使用的任何其他Cocoa/Cocoa Touch API。

一行一行处理这些问题是一种疯狂的肯定方式。 将项目移动到Swift 3时要做的第一件事情应该是从菜单栏中选择编辑>转换>转换为当前快捷语法。这将同时应用所有更改,包括一行代码受多个更改影响的情况(因此单独解决这些更改可能无法将您带到您想要的地方)。

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

+0

感谢rickster。有一个关于iOS 10中的类重命名的元问题[here](http://meta.stackoverflow.com/q/326078/2415822)。 – JAL

20

更精确,斯威夫特-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) 
+5

不需要在'UserDefaults'之前写'Foundation.' –