2016-03-13 2 views
3

У меня есть проект, который я построил в Swift 1. Но после автоконверсии в Swift 2 он показывает error: Невозможно преобразовать значение типа '[NSObject: AnyObject]' в ожидаемый тип аргумента '[String: AnyObject]'. Код функции: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 
} 

ответ

1

Вы не можете всегда сделать простой автоматический новообращенного и сделать. Обычно есть код, который автоконвертер не может понять, и оставит его в покое или сделает что-то странное с ним. В этом случае это литье NSMutableDictionary в словарь Swift.

NSLayoutConstraint.constraintsWithVisualFormat 's параметр views принимает словарь [String: AnyObject]. Это значит, что вам нужно перейти в словарь [String: AnyObject].

Измените это очень странное преобразование:

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

к этому:

views: containersDict as! [String: AnyObject]