2016-09-23 3 views
0

В Swift 2.3 я имел следующий код:Получить строку из объекта Swift 3

func getMyName() -> String { 
     return NSUserDefaults.standardUserDefaults().objectForKey("account")!["name"] as! String 
    } 

Теперь я пытаюсь преобразовать этот код Swift 3, но я борюсь с этой ошибкой:

Type 'Any' has no subscript members

Вот мой перенесенный код:

func getMyName() -> String { 
    return UserDefaults.standard.object(forKey: "account")!["name"] as! String 
} 

ответ

2

UserDefaults имеет метод dictionaryForKey именно для этого:

func getMyName() -> String { 
    return UserDefaults.standard.dictionary(forKey: "account")?["name"] as? String ?? "" 
} 
+0

@Leo Dabus Спасибо за помощь! Это работает. Не могли бы вы объяснить эту ошибку более подробно? К сожалению, я также получаю эту ошибку для: 'data [0] [" fooBar "] as! String' ('data' - массив). –

+0

UserDefaults.standard.object (forKey :) возвращает объект типа Any, который может быть словарем или нет. Вы можете использовать objectForKey, но вам нужно было бы отличить от Any до [String: Any], чтобы иметь возможность использовать индекс словаря. –

+0

, если ваши данные являются Array из любого '[Any]' вы можете получить доступ к первому элементу данных и передать его из Any в словарь '[String: Any]', как следует: (data.first as? [String: Any])? ["fooBar"] как? Строка? "" ' –

Смежные вопросы