在 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 快速澄清可选

Swift 3 - 'Any?' 类型的值没有成员“valueForKey”

在 Swift 2 中过滤 AnyObject

有没有办法在 UITest 中使用 valueForKey 和 NSPredicate?