微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 3升级:输入’Dictionary?’没有下标成员

我最近将我的应用程序从 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
}

我在“当前SSID =”行上收到错误.这段代码在Swift 2.3中运行良好,不幸的是,我对标记为“不安全”的东西并不强烈,所以如果答案深入研究这些区域,那么如果你能尽可能简单地解释它,那将是最有帮助的.

谢谢阅读!

解决方法

更改

let interfaceData = unsafeInterfaceData! as Dictionary!

let interfaceData = unsafeInterfaceData! as NSDictionary

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐