2015-08-13 3 views
1

Я пытаюсь прочитать данные из массива, который сохраняется в пользовательских по умолчанию, но типы объектов вызывают конфликты.Редактирование массива, сохраненного для пользовательских значений по умолчанию SWIFT

if NSUserDefaults.standardUserDefaults().valueForKey("data")==nil{ 
     let arrya : Array = ["Apple", "Apricot", "Banana", "Blueberry", "Cantaloupe", "Cherry", 
      "Clementine", "Coconut", "Cranberry", "Fig", "Grape", "Grapefruit", 
      "Kiwi fruit", "Lemon", "Lime", "Lychee", "Mandarine", "Mango", 
      "Melon", "Nectarine", "Olive", "Orange", "Papaya", "Peach", 
      "Pear", "Pineapple", "Raspberry", "Strawberry"] 
     NSUserDefaults.standardUserDefaults().setObject(arrya, forKey: "data") 
} 

var data = NSUserDefaults.standardUserDefaults().objectForKey("data") 

Я использую objectForKey не valueForKey из ответа на вопрос this.

Этот вопрос будет отвечать на мой вопрос, однако ... ну ... это не так. У меня все еще есть проблемы. Например:

Попытка

data.count 

возвращает ошибку:

Value of type 'AnyObject?' not unwrapped; did you mean to use '!' or '?'? 

Trying:

cell.textLabel?.text = data[0] 

возвращает ошибку:

Could not find an overload for 'subscript' that accepts supplied arguments 

Почему типы несовместимы? Я надеялся, что я получить от пользователя значения по умолчанию тот же тип, как это:

["hola", "alo", "ya", "shalom", bounjour", 1, 3, "ai"] 

Большое спасибо за любой ответ заранее. Все приветствуются и очень благодарны!

ответ

0

приведение к массиву

var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! Array<String> 

лучше использовать, если позволить, чтобы проверить, если литье не удалось

0

Значение, возвращенное из objectForKey(_:) является AnyObject? (потому что NSUserDefaults может хранить любой тип объекта), но вы пытаетесь обрабатывать возвращаемое значение как Array. Это может быть массив, но компилятор этого не знает, поэтому вам нужно сказать об этом.

Если вы уверены, что возвращаемое значение будет массивом строк, вы можете заставить случай, когда вы инициализируете вашу data переменные:

var data = NSUserDefaults.standardUserDefaults().objectForKey("data") as! [String] 

Компилятор теперь будет знать, что data имеет типа [String], а также использовать подписи и свойства, такие как count.