Как вы можете иметь разные типы возвращаемых значений для flatMap при использовании Swift Combine? У меня есть первый издатель, который генерирует значение, а затем я картографирую его, чтобы преобразовать его в нового издателя. Однако, исходя из исходного значения, мне может потребоваться другой издатель, который возвращает другой тип.
Ниже я добавил базовый пример.
import Combine
class Testing{
var subscriptions = Set<AnyCancellable>()
func getTestScore()->AnyPublisher<Int, Never>{
return Just(80).eraseToAnyPublisher()
}
func congratulate()->AnyPublisher<String, Never>{
return Just("Good Job!").eraseToAnyPublisher()
}
func getGPA()->AnyPublisher<Double, Never>{
return Just(2.2).eraseToAnyPublisher()
}
init() {
getTestScore()
.flatMap{ score in
if score < 70{
return self.getGPA()
} else{
return self.congratulate()
}
}
.sink { _ in } receiveValue: { value in
print(value)
}.store(in: &subscriptions)
}
}
let testing = Testing()
getGPA
испускаетDouble
значения, аcongratulate
испускаетString
значения .. Что.sink
должно ожидать? Это похоже на желание вернутьDouble
илиString
из функции. Вы, конечно, можете вернутьAny
, но это просто плохой выбор дизайна. Возможно, вы можете рассмотреть перечисление со связанными значениями. - person New Dev   schedule 24.11.2020