2017-11-03 8 views
2

의 블록 기반 KVO (인위적인 예) 엑스 코드 9 운동장에 코드일반 파라미터 '값'이 입력 신속한

import Foundation 

protocol ValueProviderProtocol { 
    var amount: Int { get } 
} 

class ValueProvider: NSObject, ValueProviderProtocol { 
    @objc dynamic var amount = 0 
} 

let _provider = ValueProvider() 

var provider: ValueProviderProtocol { return _provider } 

let subject = provider as! NSObject 

let observer = subject.observe(\ValueProviderProtocol.amount, options: [.old, .new]) { (provider, changes) in 

} 

를 생성 유추 할 수없는 상기 호출이 에러 결과 피사체. 준수 :

은 일반 매개 변수 '값이'유추 할 수없는

그것은 분명하지 않다 CAU은 무엇인가 오류를 노래하십시오. 이런 종류의 문제를 해결하기 위해 할 수있는 일은 무엇입니까?

답변

1

다음 줄 :

let observer = subject.observe(\ValueProviderProtocol.amount, 
           options: [.old, .new]) 
           { (provider, changes) in 
} 

요구에 변경 :

let observer = _provider.observe(\.amount, 
           options: [.old, .new], 
           changeHandler: { (provider, changes) in 

}) 

U는 속성 금액이없는 NSObject의에 downcasted 때문에 주제에 대한 관찰을 시도 할 수 없다. 두 번째 \ ValueProviderProtocol.amount는 값 유형을 유추하지 않는 부분 키 경로입니다 .amount는 키 패스를 나타내는 KeyPath입니다.