extension Reactive where Base: UIButton {
var isHighlighted: ControlEvent<Void> {
let source = methodInvoked(#selector(setter: Base.isHighlighted)).map { _ in }
return ControlEvent(events: source)
}
}
extension Reactive where Base: UIButton: 이 부분은 UIButton에 대한 확장(extension)을 선언합니다. 이는 이 확장(extension)이 UIButton의 인스턴스에만 적용됨을 의미합니다.
var isHighlighted: ControlEvent<Void>: 이 부분은 ControlEvent<Void> 타입의 계산된 속성인 isHighlighted를 정의합니다. 이 속성을 사용하면 버튼의 하이라이트 상태 변경을 관찰할 수 있습니다.
- 속성의 구현 내용:
methodInvoked: 이는 RxCocoa에서 제공하는 함수로, 기본 객체(여기서는 UIButton)에서의 메서드 호출을 관찰할 수 있게 해줍니다.
#selector(setter: Base.isHighlighted): 이 부분은 isHighlighted 속성의 세터(setter) 메서드에 대한 셀렉터(selector)를 생성합니다. 세터(setter) 메서드를 관찰함으로써 버튼의 isHighlighted 속성 변경을 포착할 수 있습니다.
map { _ in }: 이 부분은 관찰된 이벤트를 Void로 매핑하여 메서드 호출로부터 제공되는 모든 정보를 무시합니다. 이는 isHighlighted가 추가 정보를 제공하지 않지만 여전히 그 변경을 포착하고자 하는 경우에 사용됩니다.
ControlEvent(events: source): 이 부분은 매핑된 소스를 사용하여 ControlEvent를 생성합니다. ControlEvent는 RxCocoa에서 제공하는 버튼의 isHighlighted 속성에서 이벤트를 관찰하기 위한 타입입니다.