从Swift 3中的对象获取字符串

从Swift 3中的对象获取字符串,swift,swift3,Swift,Swift3,在Swift 2.3中,我有以下代码: func getMyName() -> String { return NSUserDefaults.standardUserDefaults().objectForKey("account")!["name"] as! String } 现在,我正试图将此代码转换为Swift 3,但我遇到了以下错误: 类型“Any”没有下标成员 以下是我迁移的代码: func getMyName() -> String {

在Swift 2.3中,我有以下代码:

  func getMyName() -> String {
        return NSUserDefaults.standardUserDefaults().objectForKey("account")!["name"] as! String
    }
现在,我正试图将此代码转换为Swift 3,但我遇到了以下错误:

类型“Any”没有下标成员

以下是我迁移的代码:

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

UserDefaults有一个名为DictionaryWorkey的方法,正是为了:

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

UserDefaults有一个名为DictionaryWorkey的方法,正是为了:

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

@利奥·达布斯谢谢你的帮助!这很有效。你能更详细地解释一下这个错误吗?不幸的是,我还因为以下原因收到了此错误:
data[0][“fooBar”]as!String
数据
是一个数组)。UserDefaults.standard.object(forKey:)返回任何类型的对象,该对象可能是字典,也可能不是字典。您可以使用objectForKey,但需要从任意转换为[String:Any]才能使用字典下标。如果您的数据是任意
[Any]
的数组,则可以访问数据优先元素并将其从任意转换为字典
[String:Any]
,如下所示
(data.first as?[String:Any])?[“fooBar”]as?一串“
@Leo Dabus谢谢你的帮助!这很有效。你能更详细地解释一下这个错误吗?不幸的是,我还因为以下原因收到了此错误:
data[0][“fooBar”]as!String
数据
是一个数组)。UserDefaults.standard.object(forKey:)返回任何类型的对象,该对象可能是字典,也可能不是字典。您可以使用objectForKey,但需要从任意转换为[String:Any]才能使用字典下标。如果您的数据是任意
[Any]
的数组,则可以访问数据优先元素并将其从任意转换为字典
[String:Any]
,如下所示
(data.first as?[String:Any])?[“fooBar”]as?一串“”