>

Swift 및 "Apple"프로그래밍에 익숙하지 않으므로 질문이 어리 석다면 실례합니다.

메뉴 아이템의 이미지 속성을 바인딩하는 옵션을 추가하기 위해 NSPopupButton을 서브 클래스하려고합니다.

"바인드"기능을 무시하고 싶습니다 :

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'

내 질문은 관찰 가능한 매개 변수에서 addObserver를 호출하기 위해 무엇을해야합니까?

알다시피, AnyObject 유형으로 observable을 캐스팅하려고 시도했지만 해결책을 찾을 수없는 또 다른 오류가 발생했습니다.

addObserver 줄을 다음과 같이 변경했습니다 :

observableObject.addObserver(self, forKeyPath: keyPath, options: nil, context: WDPopupButton.ImageBindingContext)

있어 :

Type of expression is ambiguous without more context

AnyObject로 관찰 가능한 캐스트가 해결책이라면,이 오류는 무엇을 의미하며 내가 뭘 잘못하고 있습니까?

감사합니다

  • 답변 # 1

    컴파일러가 Any  인스턴스에는 addObserver 라는 메소드가 없습니다.  그래서 observable.addObserver  작동하지 않습니다. ( 'Any'유형의 값에는 'addObserver'멤버가 없습니다)

    와이즈 비즈 위와 유사합니다. AnyObject에는 observableObject.addObserver 가 없습니다.  방법.

    솔루션 :

    addObserver 로 캐스팅하지 마십시오 AnyObject 로 캐스팅 . 와이즈 비즈   NSObject 를 통해 액세스 할 수 있습니다  인스턴스. 그런 다음 addObserver 에 액세스  캐스팅 된 NSObject 를 통해  인스턴스

    addObserver
    
    

    NSObject

관련 자료

  • 이전 node.js - 비동기 라이브러리가있는 루프백은 하나의 결과 콜백을 다른 콜백으로 보내는 동안 직렬 콜백 문제가 발생합니다
  • 다음 c - 무한 루프에 빠지지 않고 기능을 호출 할 수 없음