2016-06-13 95 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.' –