Swift 3升级:输入’Dictionary?’没有下标成员
发布时间:2020-12-14 04:50:46 所属栏目:百科 来源:网络整理
导读:我最近将我的应用程序从 Swift 2.3升级到 Swift 3.0,当我这样做时,我收到以下错误: Type 'DictionaryNSObject,AnyObject?' has no subscript members 它出现的功能如下: class func getSSIDConnectionName() - String? { var currentSSID: String? let int
我最近将我的应用程序从
Swift 2.3升级到
Swift 3.0,当我这样做时,我收到以下错误:
它出现的功能如下: 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”]这样的表达式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |