斯威夫特:'(字符串) - > AnyObject&#39?;没有名为' subscript'

时间:2015-08-22 04:50:35

标签: swift dictionary pfuser

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

错误:

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

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

我的PFUser有以下键: fullName 电子邮件纬度经度 linkedInUrl

由于上述键的值类型是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。我感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您声明错误的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
    ]

答案 1 :(得分:1)

您当前的代码中有两个错误

首先,使用( )而不是使用[ ]来使用以下行中的键获取值。

"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?]以保存可选值。