“无下标成员”错误(迁移到 Swift 3)

Posted

技术标签:

【中文标题】“无下标成员”错误(迁移到 Swift 3)【英文标题】:"No subscript members" error (Migrating to Swift 3) 【发布时间】:2016-10-04 20:24:13 【问题描述】:

我目前正在将我的代码迁移到 Swift 3,并且遇到了一个我无法弄清楚的错误。 observeValue(forKeyPath 函数已在 Swift 3 中更新,并且我的代码不再适用于此。错误状态“类型 '[NSKeyValueChangeKey: Any]?' has no subscript members”,它指向下标常量“change”。在 Swift 3 中的某些原因,它不会让我下标 change 参数。我该如何解决这个错误?

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) 
    //Line below is generating error: Type '[NSKeyValueChangeKey: Any]?' has no subscript members
    let change = change["new"] as? Float

【问题讨论】:

【参考方案1】:

change 参数是一个可选参数,因此您必须先将其解包,然后才能对其下标。您还应该使用枚举值作为下标而不是原始字符串:

let change = change?[.newKey] as? Float

【讨论】:

考虑到所有选项,它应该是if let

以上是关于“无下标成员”错误(迁移到 Swift 3)的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift 2.3 迁移到 Swift 3 错误消息

Swift 2.3 到 Swift 3.1 迁移 - Alamofire 请求错误

从Swift 3.2迁移到Swift 4我使用autosavesInPlace收到错误

对成员 Swift 3 的模糊引用

Swift 2 到 3 迁移错误(libc++abi.dylib:以 NSException 类型的未捕获异常终止)

迁移到 Swift 3.0,构建问题