我有一个用 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/