我在存储库中有以下代码:
public final class TimeTableRepository: TimeTableRepositoryProtocol { private let timeTableRemoteDataSource: TimeTableRemoteDataSource init(timeTableRemoteDataSource: TimeTableRemoteDataSource) { self.timeTableRemoteDataSource = timeTableRemoteDataSource } func getTimeTable() -> AnyPublisher<[TimeTableEntity]?, Error> { timeTableRemoteDataSource.getTimeTable().flatMap { return $0.toDomain() } } }
当我尝试将TimeTableModel映射到TimeTableEntity时,出现以下错误:
'flatMap(maxPublishers:_:)'生成'发布服务器。平面图<[TimeTableEntity]?,AnyPublisher<时间表模型, 任何错误>>',不是预期的上下文结果类型 'AnyPublisher<[TimeTableEntity]?,任何错误>'(Combine.Publisher)
toDomain函数:
extension TimetableModel { func toDomain() -> [TimeTableEntity]? { timetable.departures.map{ TimeTableEntity(lineDirection: $0.lineDirection ?? "", ThroughStations: $0.throughTheStations ?? "", timestamp: $0.datetime.timestamp, timezone: $0.datetime.tz) } } }
事实上 map 在这里和之后 地图 ,发布者变为发布者。映射<AnyPublisher<[TimeTableEntity]?,错误>>。你必须 erase 返回之前。它应该是:
map
地图
erase
func getTimeTable() -> AnyPublisher<[TimeTableEntity]?, Error> { timeTableRemoteDataSource.getTimeTable() .map { $0.toDomain() } .eraseToAnyPublisher() }
BTW:我认为您还应该将可选数组更改为数组,以避免出现意外情况。只是一个空数组或非空数组,而不是空数组、非空数组和非可选数组。