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