Combine进化之路5——通用类型

2023-09-11  本文已影响0人  valiant_xin

AnyPublisher、AnySubcriber、AnySubject
之前有提到过Publisher、Subscriber、Subject是类型安全的,那么在使用中不同类型的Publisher、Subscriber、Subject可能会造成一些问题。
举例:当本地数据获取和网络数据获取采用不同类型的Publisher时,类型无法具体定义。
AnyPublisher、AnySubcriber、AnySubject就是为这一问题设计的,它们是通用类型,可以通过Publisher.eraseToAnyPublisher()、eraseToAnySubscriber()、eraseToAnySubject()转化为对应的通用类型。

// 测试擦除类型
    func eraseFunc() {
//        let publisher = Just("Hello")
//            .delay(for: 2, scheduler: DispatchQueue.main)
//            .eraseToAnyPublisher()
        let publisher = ["1","2","4","8","99","7"].publisher.eraseToAnyPublisher()
        
        let subscriber = Subscribers.Sink<String, Never> { completion in
            print("completion: \(completion)")
        } receiveValue: { input in
            print("receive: \(input)")
            print(input)
        }

        publisher.receive(subscriber: subscriber)
    }

Combine进化之路合集

上一篇 下一篇

猜你喜欢

热点阅读