杨锴
2024-08-14 909e20941e45f8712c012db602034b47da0bfdb0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//
//  NSObject+Rx+RawRepresentable.swift
//  RxCocoa
//
//  Created by Krunoslav Zaher on 11/9/15.
//  Copyright © 2015 Krunoslav Zaher. All rights reserved.
//
 
#if !os(Linux)
 
import RxSwift
 
import Foundation
 
extension Reactive where Base: NSObject {
    /**
     Specialization of generic `observe` method.
 
     This specialization first observes `KVORepresentable` value and then converts it to `RawRepresentable` value.
     
     It is useful for observing bridged ObjC enum values.
 
     For more information take a look at `observe` method.
     */
    public func observe<Element: RawRepresentable>(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial], retainSelf: Bool = true) -> Observable<Element?> where Element.RawValue: KVORepresentable {
        return self.observe(Element.RawValue.KVOType.self, keyPath, options: options, retainSelf: retainSelf)
            .map(Element.init)
    }
}
 
#if !DISABLE_SWIZZLING
 
    // observeWeakly + RawRepresentable
    extension Reactive where Base: NSObject {
 
        /**
         Specialization of generic `observeWeakly` method.
 
         This specialization first observes `KVORepresentable` value and then converts it to `RawRepresentable` value.
     
         It is useful for observing bridged ObjC enum values.
 
         For more information take a look at `observeWeakly` method.
         */
        public func observeWeakly<Element: RawRepresentable>(_ type: Element.Type, _ keyPath: String, options: KeyValueObservingOptions = [.new, .initial]) -> Observable<Element?> where Element.RawValue: KVORepresentable {
            return self.observeWeakly(Element.RawValue.KVOType.self, keyPath, options: options)
                .map(Element.init)
        }
    }
#endif
 
#endif