Да, поэтому first()
может выдать , а возвращает тип Optional, поэтому try? first()
возвращает Optional<Optional<Int>>
или Int??
. Честно говоря, я думаю, что функция first()
написана плохо. Он должен либо выбросить , либо вернуть необязательно, но не оба.
Вы можете написать оператор flattened
:
public protocol OptionalType {
associatedtype Wrapped
var value: Wrapped? { get }
}
extension Optional: OptionalType {
public var value: Wrapped? {
return self
}
}
extension Optional where Wrapped: OptionalType {
var flattened: Wrapped.Wrapped? {
switch self {
case let .some(opt):
return opt.value
case .none:
return nil
}
}
}
Что позволит вам сделать:
let expectedCheckSum = (try? subject.verifier.toBlocking().first()).flattened ?? 0
Считаете ли вы, что оно того стоит или нет, это ваш звонок.