斯威夫特:'(字符串)-> AnyObject?没有名为“下标”的成员

Posted

技术标签:

【中文标题】斯威夫特:\'(字符串)-> AnyObject?没有名为“下标”的成员【英文标题】:Swift: '(String) -> AnyObject?' does not have a member named 'subscript'斯威夫特:'(字符串)-> AnyObject?没有名为“下标”的成员 【发布时间】:2015-08-22 04:50:35 【问题描述】:

我正在尝试将 PFUser(来自 Parse.com)转换为 [String : AnyObject] 类型的字典,但出现以下错误,这对我来说似乎很困惑。我做了谷歌搜索,发现了以下两个 SO 问题,但是,这仍然对解决我的问题没有帮助:

错误:

'(String) -> AnyObject?' does not have a member named 'subscript'

找到这两个帖子: relevant SO post 1, relevant SO post 2

我的 PFUser 有以下键:fullNameemaillatitudelongitudelinkedInUrl

由于上述键的值类型是 String 和 Double 的混合。所以我正在尝试创建以下字典:

var userData : [String: AnyObject] = [
            "fullName" : pfUser.valueForKey("fullName") as? String,
            "latitude" : pfUser.valueForKey("latitude") as? Double,
            "longitude" : pfUser.valueForKey("longitude") as? Double,
            "email" : pfUser.valueForKey("email") as? String,
            "linkedInUrl" : pfUser.valueForKey["linkedInUrl"] as? String
        ]

我的 XCode 版本是 6.4。我感谢您的帮助。

【问题讨论】:

【参考方案1】:

您声明了错误的userData 类型。它必须是[String: AnyObject?],因为您的值是可选的。

别忘了把这行"linkedInUrl" : pfUser.valueForKey["linkedInUrl"] as? String换成这行"linkedInUrl" : pfUser.valueForKey("linkedInUrl") as? String

您的代码将是:

var userData : [String: AnyObject?] = [
        "fullName" : pfUser.valueForKey("fullName") as? String,
        "latitude" : pfUser.valueForKey("latitude") as? Double,
        "longitude" : pfUser.valueForKey("longitude") as? Double,
        "email" : pfUser.valueForKey("email") as? String,
        "linkedInUrl" : pfUser.valueForKey("linkedInUrl") as? String
    ]

【讨论】:

【参考方案2】:

你当前的代码有两个错误

第一个是,使用( ) 而不是使用[ ] 来使用下一行中的键获取值。

"linkedInUrl" : pfUser.valueForKey["linkedInUrl"] as? String

第二个是,用感叹号代替解开可选项。

您的代码应如下所示。

var userData : [String: AnyObject] = [
   "fullName" : pfUser.valueForKey("fullName") as! String,
   "latitude" : pfUser.valueForKey("latitude") as! Double,
   "longitude" : pfUser.valueForKey("longitude") as! Double,
   "email" : pfUser.valueForKey("email") as! String,
   "linkedInUrl" : pfUser.valueForKey("linkedInUrl") as! String
]

另一种解决方案是,将字典声明为[String: AnyObject?] 以保存可选值。

【讨论】:

以上是关于斯威夫特:'(字符串)-> AnyObject?没有名为“下标”的成员的主要内容,如果未能解决你的问题,请参考以下文章

如何更换字符串的部分和更多。斯威夫特4

加入两个字符串 - 斯威夫特

如何将数组对象转换为 JSON 字符串。 IOS 8。斯威夫特 1.2

从字符串中删除最后一个字符。斯威夫特语言

基于正则表达式从字符串中提取字符串数组? - 斯威夫特

斯威夫特 3;用非可选字符串附加可选字符串