ios - 快速字典错误

标签 ios swift

我有这个功能:

typealias KeyValue = Dictionary<String,AnyObject>
func response( response: NSHTTPURLResponse!, data: AnyObject!, error: NSError! ) {

    var resData = data as NSDictionary

    if( resData["status"] as Int == 1 ){

        var content = resData["content"] as Array<KeyValue>

        for player in content {

            let id      : Int       = player["id"]
            let score   : Int       = player["score"]
            let name    : String    = player["name"]

            players[ id ]!.setName( name )
            players[ id ]!.setScore( score )
        }

    } else {
        println( resData["error"] )
    }

    self.playersList.reloadData()
}

我收到了这个错误:
“(String, AnyObject)”不可转换为“Int”
在这条线上

let id      : Int       = player["id"]
let score   : Int       = player["score"]
let name    : String    = player["name"]

我不明白为什么

内容是数组
-> 播放器是键值
-> 播放器是字典
-> player["id"] 是 AnyObject

那么他为什么认为 player["id"] 是'(String, AnyObject)'??

谢谢

更新

对此错误进行更改:

let id      = player["id"]!     as Int
let score   = player["score"]!  as Int
let name    = player["name"]!   as String

但现在我在运行时得到了这个:

Thread 5: EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT,subcode=0xdefe) 

最佳答案

player在你的循环中是 Dictionary<String, AnyObject> 的一个实例.所以存储在该字典中的值是 AnyObject 的实例.

在这一行中:

let id : Int = player["id"]

您正在尝试从 AnyObject 进行隐式转换至 Int ,这是不可能的。正确的处理方法是:

  1. 解包从字典中提取的值(如果键不存在,它可以是nil)
  2. 明确转换为 Int

所以该行应该固定如下:

let id : Int = player["id"]! as Int

也可以缩写为:

let id = player["id"]! as Int

类似的规则适用于 scorename

附录 - 根据您的上一个错误,可能是由于字典中没有键。尝试像这样使用可选值:

let id = (player["id"] as AnyObject?) as? Int
let score = (player["score"] as AnyObject?) as? Int
let name = (player["name"] as AnyObject?) as? String

你有 3 个可选变量,它们得到 nil如果右侧相应的表达式计算为 nil .如果可行,请使用调试器检查哪个键不在字典中

关于ios - 快速字典错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768210/

相关文章:

ios - 应用程序在设备上崩溃但在模拟器中没有崩溃 :[UITableViewController loadView] loaded the "XXXViewController" nib but didn't get a UITableView. '

ios - 在 iOS leftBarButtonItem 上更改字体?

ios - MPNowPlayingInfoCenter nowPlayingInfo 在轨道结束时不更新

ios - NSUserDefaults 切换开关在多任务处理后不粘

ios - 调用Webservice时键盘关闭强制

swift - 如何使背景大小适合不同的屏幕?

ios - 确保“今天”扩展程序已更新了核心数据中的信息

ios - 我如何设置 UIDatePicker 以在 swift 当前日期后一天显示?

ios - 无法分配给受限于类的协议(protocol)中的属性 - Swift 编译器错误

matlab - swift 是否有等效的 "eval"函数,就像在 Matlab 中一样?