Próbuję zrozumieć szczegółowoCo robi następujący przykładowy kod z RxSwift/RxCocoa?
.drive(resultsTableView.rx_itemsWithCellIdentifier("WikipediaSearchCell",
cellType: WikipediaSearchCell.self))
{ (_, viewModel, cell) in
cell.viewModel = viewModel
}
z linii WikipediaSearchViewController.swift 47-64. Starałem się wyodrębnić argumenty, aby spojrzeć na konkretne podpisami typu, ale przepisać do
let temp1 = searchBar.rx_text
.asDriver()
.throttle(0.3)
.distinctUntilChanged()
.flatMapLatest { query in
API.getSearchResults(query)
.retry(3)
.retryOnBecomesReachable([], reachabilityService: ReachabilityService.sharedReachabilityService)
.startWith([]) // clears results on new search term
.asDriver(onErrorJustReturn: [])
}
.map { results in
results.map(SearchResultViewModel.init)
}
let driveArg1 = resultsTableView.rx_itemsWithCellIdentifier("WikipediaSearchCell", cellType: WikipediaSearchCell.self)
let driveArg2 = { (_, viewModel: SearchResultViewModel, cell: WikipediaSearchCell) in
cell.viewModel = viewModel
}
temp1.drive(driveArg1, curriedArgument: driveArg2)
.addDisposableTo(disposeBag)
daje
nie może powoływać „rx_itemsWithCellIdentifier” z listy argumentów typu „(String, cellType: UITableViewCell.Type)”
dla driveArg1 i
rodzaj wyrażenia jest niejednoznaczny bez kontekstu
dla driveArg2.
Podpisy drive
i rx_itemsWithCellIdentifier
są
public func drive<R1, R2>(with: Self -> R1 -> R2, curriedArgument: R1) -> R2 {}
public func rx_itemsWithCellIdentifier(cellIdentifier: String, cellType: Cell.Type = Cell.self)(source: O)(configureCell: (Int, S.Generator.Element, Cell) -> Void) -> Disposable {}
ale w tym momencie składnia Swift jest cholernie niezrozumiałe dla mnie. Czy ktoś może wyjaśnić podpisy i co dzieje się w kodzie?
I m zrozumiał, że istnieje rodzaj rodzajowego niedopasowania typu. I nie może znaleźć ogólnego rodzaju (S: SequenceType) w parametrach funkcji rx_itemsWithCellIdentifier. –