Я довольно новичок в программировании на Swift и "Apple", поэтому извините, если мой вопрос глупый.
Я пытаюсь создать подкласс NSPopupButton, чтобы добавить опцию для привязки свойства изображения пунктов меню.
Я хочу переопределить функцию «bind»:
override func bind(_ binding: NSBindingName, to observable: Any, withKeyPath keyPath: String, options: [NSBindingOption : Any]? = nil)
И для наблюдения «наблюдаемого» параметра, вот код, который я написал до сих пор:
class WDPopupButton: NSPopUpButton
{
static let ImageBindingContext: UnsafeMutableRawPointer? = UnsafeMutableRawPointer(mutating: "imageContext")
override func bind(_ binding: NSBindingName, to observable: Any, withKeyPath keyPath: String, options: [NSBindingOption : Any]? = nil)
{
if(binding == NSBindingName.image)
{
guard let observableObject = observable as AnyObject? else
{
return
}
observable.addObserver(self, forKeyPath: keyPath, options: nil, context: WDPopupButton.ImageBindingContext)
...
}
}
}
Но я получаю следующую ошибку:
Value of type 'Any' has no member 'addObserver'
Мой вопрос: что мне нужно сделать, чтобы вызвать addObserver для наблюдаемого параметра?
Как видите, я пытался привести наблюдаемое к типу AnyObject, но затем получил другую ошибку, для которой не смог найти решение.
Я изменил строку addObserver на:
observableObject.addObserver(self, forKeyPath: keyPath, options: nil, context: WDPopupButton.ImageBindingContext)
и получил:
Type of expression is ambiguous without more context
Если приведение наблюдаемого к AnyObject является решением, то что означает эта ошибка и что я делаю неправильно?
Спасибо