2016-10-04 3 views
10

У меня есть проект, построенный в Swift 1.5. Когда я преобразовал код стремительной 3.0 он начал показывать мне ошибки в каждом «если» заявление в код ниже:Неоднозначная ссылка на «нижний индекс участника» в Swift 3

convenience init?(userInfo: [NSObject: AnyObject]) { 
    guard let statusString = userInfo[ConnectionMessage.StatusKey] as? String else { 
     return nil 
    } 
    guard let status = ConnectionStatus(string: statusString) else { 
     return nil 
    } 

    guard let connectionId = userInfo[ConnectionMessage.ConnectionIdKey]?.longLongValue else { 
     return nil 
    } 

    var ssid = "" 

    if let newSsid = userInfo[ConnectionMessage.SSIDKey] as? String { 
     ssid = newSsid 
    } 

    var password = "" 
    if let pw = userInfo[ConnectionMessage.PasswordKey] as? String { 
     password = pw 
    } 

    let buyerName = userInfo[ConnectionMessage.BuyerNameKey] as? String 

    self.init(status: status, connectionId: connectionId, ssid: ssid, password: password, buyerName: buyerName) 
} 

Ошибка является

Неоднозначность ссылка на подстрочный член

Я искал решения, найденные на StackOverflow, но не повезло. Пожалуйста, направляйте.

ответ

20

Изменить userInfo от [NSObject : AnyObject] до [String : AnyObject]. Это предполагает, что все ваши значения ConnectionMessage.xxxKey: String.

Вы также должны убедиться, что словарь, который вы передаете в параметр userInfo, на самом деле является словарем с ключами типа String.

+0

Спасибо. Понял. Не могли бы вы объяснить, почему он работал в предыдущих версиях быстро и почему сейчас не работает? – Yogi

+0

Я только научился Swift с 3.0, поэтому я не знаю, как это было обработано в более старых версиях. – rmaddy

Смежные вопросы