在swift中使用valueForKey时出错

时间:2015-05-12 08:50:23

标签: ios swift

当我使用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  
}

但它给了我错误:

  

找不到会员&#39;下标&#39;

2 个答案:

答案 0 :(得分:2)

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](字典)。

答案 1 :(得分:0)

这样写。

let dictionary = responseObject["subscribe"] as! Dictionary<String, AnyObject>
self.strSubscribe = dictionary["subscribe_ids"] as! String

由于responseObject["subscribe"]会给出AnyObject吗?输出和AnyObject没有任何名为valueForKey的成员。