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)
}