在 swift 中使用 valueForKey 时出错
Posted
技术标签:
【中文标题】在 swift 中使用 valueForKey 时出错【英文标题】:error using valueForKey in swift 【发布时间】:2015-05-12 08:50:22 【问题描述】:为什么我在使用valueForKey
时会出错...我使用与objectiveC
相同的技巧...
在ObjectiveC
,代码是
self.strSubscribe =[responseObject[@"subscribe"] valueForKey:@"subscribe_ids"];
在Swift
,代码是
self.strSubscribe = responseObject["subscribe"].valueForKey["subscribe_ids"] as! String
我声明变量像
var arraySubCategory : NSMutableArray! = NSMutableArray()
var strSubscribe:String!
我试图从下面的响应中访问值
subscribe =
"subscribe_ids" = "1,14";
编辑 它使用 Amit 和 Eric 的解决方案,但现在用于跟踪数据
data = (
"subscribe_ids" = "1,14";
);
let dictionary = responseObject["data"][0] as! Dictionary<String,AnyObject>
self.strSubscribe = dictionary["subscribe_ids"] as! String
或//
if let dic = responseObject["data"][0] as? [String:String], let ids = dic["subscribe_ids"]
self.strSubscribe = ids
但它给了我错误:
找不到成员“下标”
【问题讨论】:
我不知道为什么会这样,但我发现了一个标题类似于你问题的问题。看看***.com/questions/26508044/… 似乎您必须将responseObject["subscribe"]
转换为正确的类型,然后才能访问其.valueForKey
subscribe 似乎不是字符串(如您的回复中所示)。尝试将其转换为 [String:String] 并在此转换中运行 .valueForKey
@gutenmorgenuhu 是有效的
【参考方案1】:
Swift 不知道responseObject["subscribe"]
的类型,你得帮编译一下;例如:
if let dic = responseObject["subscribe"] as? [String:String], let ids = dic["subscribe_ids"]
self.strSubscribe = ids // "1,14"
更新:
还是同样的问题:编译器不知道responseObject["data"]
的类型,所以当你尝试访问下标时会出错(因为你知道它是数组中的字典,但编译器没有)。
一种解决方案是通过在if let
条件中声明一个字典数组来将类型提供给编译器:
if let arr = responseObject["data"] as? [[String:String]], let ids = arr[0]["subscribe_ids"]
self.strSubscribe = ids
注意它是[[String:String]]
(字典数组),而不是[String:String]
(字典)。
【讨论】:
【参考方案2】:这样写。
let dictionary = responseObject["subscribe"] as! Dictionary<String, AnyObject>
self.strSubscribe = dictionary["subscribe_ids"] as! String
既然responseObject["subscribe"]
会给出一个AnyObject?输出并且 AnyObject 没有任何名为 valueForKey
的成员。
【讨论】:
valueForKey 方法不在 Swift 字典中。您不能使用此方法。以上是关于在 swift 中使用 valueForKey 时出错的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3“任何”类型的值没有成员“valueForKey”
在 Swift 中,对于 AnyObject,我如何 setValue() 然后调用 valueForKey()
使用 NSDictionary 和 valueForKey 快速澄清可选