Попытка сделать вложенные уловы в Combine - PullRequest
0 голосов
/ 25 апреля 2020

Этот код работает, и я полностью доволен им.
Обратите внимание, функция fromFile () выбрасывает.

        return container
    }
    .tryCatch { error -> Just<Container> in
        print(error.localizedDescription)
        return Just(try fromFile())
    }
    .catch { error -> Empty<Container, Never> in
        print(error.localizedDescription)
        return Empty()
    }

Но теперь, в качестве упражнения, я хочу попробовать сделать его вложенным :
enter image description here

На самом деле во вложенном случае это должен быть .catch, а не .tryCatch:
enter image description here [Отредактировано]
Окей, в случае с желтым предупреждением, это, вероятно, из-за издателя Just имеет тип ошибки <Never>. Поэтому мы должны применить оператор setFailureType сразу после Just:

return Just(try fromFile())
    .setFailureType(to: Error.self)
    .catch { error -> Empty<Container, Never> in
         print(error.localizedDescription)
         return Empty()
    }

Теперь он компилируется без каких-либо предупреждений, но не работает должным образом. catch не ловит никаких ошибок. Ошибка распространяется далее на sink оператора.

...