NSUserDefaults
больше не является классом в iOS 10 SDK:
let defaults = NSUserDefaults.standardUserDefaults()
Это не скомпилируется. Удалился ли этот класс?
(Это каноническая пара Q & A, чтобы предотвратить поток повторяющихся вопросов)
NSUserDefaults
больше не является классом в iOS 10 SDK:
let defaults = NSUserDefaults.standardUserDefaults()
Это не скомпилируется. Удалился ли этот класс?
(Это каноническая пара Q & A, чтобы предотвратить поток повторяющихся вопросов)
NSUserDefaults
был переименован в UserDefaults
. standardUserDefaults()
был переименован в standard()
.
let defaults = UserDefaults.standard
Теперь это работает.
Точнее использовать UserDefaults в Swift-3: -
//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)
@JAL ответ правильный, но, возможно, слишком конкретный.
Множество API было переименовано в Swift 3. Большинство типов Foundation (NSUserDefaults
среди них) потеряли префикс NS
и имели свои методы переименовали в отразить Руководство по API Swift 3. Фонд также "заменяет" * набор основных классов типов данных (NSURL
, NSIndexPath
, NSDate
и т.д.) С Swift-native значениями типов ( URL
, IndexPath
, Date
и т.д.). Переименование метода также применимо к любым другим Cocoa/Cocoa Touch API, которые вы используете в своем приложении.
Решение этих проблем по очереди, по очереди, является верным способом безумия. Первое, что вы делаете при перемещении проекта в Swift 3, - это выбрать Edit > Convert > To Current Swift Syntax из строки меню. Это применит все изменения сразу, в том числе случаи, когда одна строка кода зависит от нескольких изменений (и, следовательно, их индивидуальное обращение может не привести вас туда, где вы думаете, что собираетесь).
* Я помещаю "заменяет" в кавычках, потому что соответствующие классы NS
все еще существуют для случаев, когда они вам нужны, но любой API, который их использует, ссылается на новые типы значений: например. tableView(_:cellForRowAt:)
теперь принимает IndexPath
, а не NSIndexPath
.