Swift3 将Swift 1语法改写为Swift 3-“;类型Any没有下标值“;
这是用Swift 1编写的应用程序的语法,Xcode 8已将其转换为Swift 3。它抛出一个错误,说“type Any没有下标值”。我不知道如何解决这个问题,请帮助我 在这种情况下,您可能需要使用常用的Swift字典,因此应该更改Swift3 将Swift 1语法改写为Swift 3-“;类型Any没有下标值“;,swift3,syntax,skylink,Swift3,Syntax,Skylink,这是用Swift 1编写的应用程序的语法,Xcode 8已将其转换为Swift 3。它抛出一个错误,说“type Any没有下标值”。我不知道如何解决这个问题,请帮助我 在这种情况下,您可能需要使用常用的Swift字典,因此应该更改 var peerIds = [String]() var peersInfos: NSMutableDictionary! self.peersInfos.addEntries(from: [peerId: ["videoView": NSNull(), "vid
var peerIds = [String]()
var peersInfos: NSMutableDictionary!
self.peersInfos.addEntries(from: [peerId: ["videoView": NSNull(), "videoSize": NSNull(), "isAudioMuted": NSNull(), "isVideoMuted": NSNull()]])
let videoView = (self.peersInfos[peerId]?["videoView"])!
let videoSize = (self.peersInfos[peerId]?["videoSize"])!
let isAudioMuted = (self.peersInfos[peerId]?["isAudioMuted"])!
到
首先,即使您的问题已经解决,您也会在展开可选值错误时得到著名的意外发现nil,因为可变字典已声明但未初始化 出现错误类型Any没有下标值,因为字典的值默认为
Any
,编译器需要知道所有下标对象的静态类型
字典peersinfo
包含嵌套字典,因此将其声明为本机Swift类型
var peersInfos: [String: Any]!
然后你就可以写了
var peerIds = [String]()
var peersInfos = [String:[String:Any]]()
var peerIds = [String]()
var peersInfos = [String:[String:Any]]()
self.peersInfos[peerId] = ["videoView": NSNull(), "videoSize": NSNull(), "isAudioMuted": NSNull(), "isVideoMuted": NSNull()]
if let info = self.peersInfos[peerId] {
let videoView = info["videoView"]!
let videoSize = info["videoSize"]!
let isAudioMuted = info["isAudioMuted"]!
}