ios - 在 swift 中使用 valueForKey 时出错

标签 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  
}

但它给我错误:

could not find member 'subscript'

最佳答案

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

关于ios - 在 swift 中使用 valueForKey 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30186009/

相关文章:

ios - 在主队列上更改 View Controller 布局的最快方式?

ios - Swift - 在面部识别运行后,使用 Apple 登录始终会导致 'Sign up not completed'

generics - 如何在 Swift 中调用不明确的泛型函数?

android - iOS 上的后台任务计时器

ios - 解析响应 Facebook iOS sdk

ios - 应用程序在 UIActivityViewController 上崩溃

Swift - 协议(protocol)中带有 where 子句的关联类型?

ios - 在 Xcode 版本 7.3 (7D175) 中处理符号文件

带有collectionview subview 的ios uiviewcontroller不显示单元格

ios - iPhone 应用程序的 C 代码链接错误