Swift 3 升级 : Type 'Dictionary<NSObject, AnyObject>?' has no subscript members

标签 swift swift3

我最近将我的应用程序从 Swift 2.3 升级到 Swift 3.0,当我这样做时,我收到以下错误:

Type 'Dictionary<NSObject, AnyObject>?' has no subscript members

它出现的函数如下:

class func getSSIDConnectionName() -> String? {
    var currentSSID: String?
    let interfaces = CNCopySupportedInterfaces()
    if interfaces == nil {
        print("Got nil up here")
        return nil
    }

    let interfaces2:CFArray! = interfaces
    for i in 0..<CFArrayGetCount(interfaces2) {
        let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces2, i)
        let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
        let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString)
        if unsafeInterfaceData != nil {
            let interfaceData = unsafeInterfaceData! as Dictionary!
            currentSSID = interfaceData["SSID"] as? String
        } else {
            print("Got nil down here")
            return nil
        }
    }

return currentSSID
}

我在“current SSID =”行收到错误。这段代码在 Swift 2.3 中运行良好,不幸的是,我不擅长标记为“不安全”的东西,所以如果答案深入到那些区域,那么如果你能尽可能简单地解释它会很有帮助。

感谢阅读!

最佳答案

改变

let interfaceData = unsafeInterfaceData! as Dictionary!

let interfaceData = unsafeInterfaceData! as NSDictionary

原因:unsafeInterfaceData 是一个 CFDictionary。 CFDictionary 可直接转换为 NSDictionary,因为它们是免费桥接的。这足以让我们订阅,因此我们可以使用像 interfaceData["SSID"] 这样的表达式。

关于Swift 3 升级 : Type 'Dictionary<NSObject, AnyObject>?' has no subscript members,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755966/

相关文章:

ios - 如何从名称中带点的 cocoapods 导入库?

ios - Swift:将子类类型的对象分配给具有泛型的基类类型的变量会产生错误

ios - 触摸文本框不起作用

command-line - 命令行工具 - 错误 - xcrun : error: unable to find utility "xcodebuild", 不是开发人员工具或位于 PATH 中

ios - swift 3 : UIViewControllerTransitioningDelegate stopped working

ios - 在类函数中通过关键字 `self` 初始化泛型类

ios - 如何在 UICollectionViewCell 中为 UIView 设置动画?

ios - 按日期对过滤结果进行分组,而不将所有内容转储到内存中

swift - 未解析的标识符 - 用于循环逻辑

ios - UISearchController updateSearchResults 问题