swift 2 : Cannot convert value of type '[NSObject : AnyObject]' to expected argument type '[String : AnyObject]'

标签 swift swift2

我有一个用 Swift 1 构建的项目。但是在自动转换为 Swift 2 后,它显示错误:无法将类型 '[NSObject : AnyObject]' 的值转换为预期的参数类型 '[String : AnyObject]'。 函数代码:

func createViewContainers() -> NSDictionary {

    var containersDict = NSMutableDictionary()
    let itemsCount : Int = tabBar.items!.count as Int - 1

    for index in 0...itemsCount {
        var viewContainer = createViewContainer()
        containersDict.setValue(viewContainer, forKey: "container\(index)")
    }

    var keys = containersDict.allKeys

    var formatString = "H:|-(0)-[container0]"
    for index in 1...itemsCount {
        formatString += "-(0)-[container\(index)(==container0)]"
    }
    formatString += "-(0)-|"
    var  constranints = NSLayoutConstraint.constraintsWithVisualFormat(formatString,
        options:NSLayoutFormatOptions.DirectionRightToLeft,
        metrics: nil,
        views: (containersDict as [NSObject : AnyObject]!) as [NSObject : AnyObject]!)
    view.addConstraints(constranints)

    return containersDict
}

最佳答案

您不能总是做一个简单的自动转换就完成了。通常会有一些自动转换器无法识别的代码,并且会不理会它或用它做一些奇怪的事情。在这种情况下,它是将 NSMutableDictionary 转换为 Swift 字典。

NSLayoutConstraint.constraintsWithVisualFormat 的参数views 接受[String: AnyObject] 的字典。所以这意味着您必须传入一个 [String: AnyObject] 字典。

改变这个非常奇怪的转换:

views: (containersDict as [NSObject : AnyObject]!) as [NSObject : AnyObject]!)

为此:

views: containersDict as! [String: AnyObject]

关于 swift 2 : Cannot convert value of type '[NSObject : AnyObject]' to expected argument type '[String : AnyObject]' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35969618/

相关文章:

swift - Swift 中的 Hashable 和 Equatable 有什么用?什么时候使用哪个?

objective-c - 无法在 Swift 中使用 NSCoder 解码 Int

swift - func collectionView 在 dataTask() 方法完成之前被调用

xcode - 仅设置 "All Exceptions"断点时,Xcode 7 始终在应用程序启动时停止

ios - 在 Xcode Project 中查找本地视频的路径

ios - 进度 View 无限步?

swift - UIView 调整大小以适应其中的标签

ios - 为什么 iOS 启动屏幕然后快照然后主屏幕?

iOS ImageView 未填满屏幕且 Button 不在屏幕底部

ios - swift2.0如何设置app locale