Неоднозначная ссылка NSKeyValueChangeKey на индекс члена

когда я конвертирую из swift 2 в swift 3, ошибка, с которой я сталкиваюсь, - это "неоднозначная ссылка на индекс члена"

Ниже мой код:

class KeyValueChange {

    fileprivate let change: [String : AnyObject]

    init(change: [String : AnyObject]) {
        self.change = change
    }

    var kind: NSKeyValueChange? {
        guard let value = change[NSKeyValueChangeKey.kindKey] as? NSNumber else {
            return nil
        }

        return NSKeyValueChange(rawValue: value.uintValue)
    }

    var indexSet: IndexSet? {
        return change[NSKeyValueChangeKey.indexesKey] as? IndexSet
    }

    var new: AnyObject? {
        return change[NSKeyValueChangeKey.newKey]
    }

}

Пожалуйста, разработайте это правильно, потому что во многих местах возникает одна и та же ошибка

заранее спасибо


person Mohammed Ebrahim    schedule 04.11.2016    source источник


Ответы (1)


В Swift3 метод KVO observeValue(forKeyPath:of:change:context:) передает [NSKeyValueChangeKey : Any]? для параметра change. Если вы хотите использовать с ним свой класс KeyValueChange, вам лучше адаптироваться к изменению:

class KeyValueChange {

    private let change: [NSKeyValueChangeKey : Any]

    init(change: [NSKeyValueChangeKey : Any]) {
        self.change = change
    }

    var kind: NSKeyValueChange? {

        guard let value = change[NSKeyValueChangeKey.kindKey] as? NSNumber else {
            return nil
        }

        return NSKeyValueChange(rawValue: value.uintValue)
    }

    var indexSet: IndexSet? {
        return change[NSKeyValueChangeKey.indexesKey] as? IndexSet
    }

    var new: Any? {
        return change[NSKeyValueChangeKey.newKey]
    }

}
person OOPer    schedule 05.11.2016