Ошибка при: переопределении общедоступного func observValueForKeyPath

Я использую код, который работал с бета-версией xCode7. Просто получил Beta 3, и теперь я получаю эту проблему, которая кажется ошибкой xCode?

Для одного из моих публичных классов...

override public func observeValueForKeyPath...

error: метод не отменяет какой-либо метод из его суперкласса

Итак, я вынимаю "переопределить":

public func observeValueForKeyPath

error: метод конфликтует с методом из суперкласса NSObject с тем же селектором Objective-C ха! Первая ошибка. Не будет компилироваться в любом случае.
Любая помощь пожалуйста?

Ответы

Ответ 1

Измените [NSObject:AnyObject] в объявлении на [String:AnyObject].

Ответ 2

Если определение скопировано из NSKeyValueObserving.h, ваше переопределение будет выглядеть следующим образом.

iOS SDK 9.0

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    //...
}

До IOS SDK 9.0

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject: AnyObject], context: UnsafeMutablePointer<Void>) {
    // ...
}

Примечание.. Для таких методов, как этот, вы обычно можете нажать Cmd+Shift+O и сразу перейти к открытому быстрому всплывающему окну, где любое определение может быть скопировано/вставлено, а Xcode будет искать для него в рамках проекта /SDK. Наблюдайте за областью iOS в этом случае.