Вы просто немного не в порядке.
.map
сопоставляет значения, поэтому вам нужно вернуть новое значение, а не нового издателя. Затем используйте .eraseToAnyPublisher
, чтобы создать AnyPublisher
publisher:
func intPublisher() -> AnyPublisher<Int, Never> {
subject.map { Int($0) ?? 0 }
.eraseToAnyPublisher()
}
Вы также можете использовать AnyPublisher(subject.map { Int($0) ?? 0 })
(параметр init - это издатель, а не значение).
Для полноты вы можете вернуть издателя для каждого значения, но тогда вам нужно будет использовать flatMap
. Следующее приводит к тому же результату, что и выше, но только излишне запутанным способом:
subject.flatMap { string in
Just( Int(string) ?? 0 )
}.eraseToAnyPublisher()