我对Swift和“ Apple”编程非常陌生,如果我的问题很愚蠢,请原谅。
我正在尝试对NSPopupButton进行子类化,以便添加用于绑定菜单项的image属性的选项。
我要覆盖“绑定”功能:
override func bind(_ binding: NSBindingName, to observable: Any, withKeyPath keyPath: String, options: [NSBindingOption : Any]? = nil)
要观察“ observable”参数,所以这是我到目前为止编写的代码:
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'
我的问题是,要在observable参数上调用addObserver,我需要做什么?
如您所见,我确实尝试将observable转换为AnyObject类型,但是随后又收到另一个错误,找不到解决方案。
我将addObserver行更改为:
observableObject.addObserver(self, forKeyPath: keyPath, options: nil, context: WDPopupButton.ImageBindingContext)
得到了:
Type of expression is ambiguous without more context
如果将可观察到的AnyObject强制转换是解决方案,那么此错误意味着什么,我在做什么错了?
谢谢
答案 0 :(得分:0)
编译器告诉您Any
实例没有名为addObserver
的方法,这就是observable.addObserver
不起作用的原因。 (“ Any”类型的值没有成员“ addObserver”)
对于observableObject.addObserver
,它也与上面类似,AnyObject没有addObserver
方法。
解决方案:
请勿强制转换为AnyObject
,请勿强制转换为NSObject
。 addObserver
可通过NSObject
实例访问。然后通过强制转换的addObserver
实例访问NSObject
guard let observableObject = observable as? NSObject else {return}
observableObject.addObserver(self, forKeyPath: keyPath, options: nil, context: WDPopupButton.ImageBindingContext)