【发布时间】:2021-04-21 05:00:44
【问题描述】:
我有一个 tableview 视图数据列表,用户可以在其中选择一个项目,我使用 ZPPickerDataSource 协议作为数据源,现阶段没有问题
public protocol ZPPickerDataSource: ZPSearchableDataSource {
var uuID: String {get}
var displayString: String {get}
}
此外,UI 还具有搜索功能,为此我使用了 ZPSearchableDataSource、ZPSearchable。 ZPPickerDataSource 协议向 ZPSearchableDataSource 确认。
public protocol ZPSearchableDataSource {
var displayString: String {get}
}
public protocol ZPSearchable {
associatedtype dataSourceType: ZPSearchableDataSource
var searchableItems: [dataSourceType] {get}
func search(keyword: String) -> [dataSourceType]
}
public extension ZPSearchable {
func search(keyword: String) -> [dataSourceType] {
return searchableItems.filter{$0.displayString.contains(keyword)}
}
}
当我提到 ZPSearchable 协议时
typealias dataSourceType = ZPPickerDataSource
我收到类似 您的控制器未确认协议 ZPSearchable 之类的错误。
class MyPickerScreen: ZPSearchable {
typealias dataSourceType = ZPPickerDataSource
var searchableItems: [dataSourceType] {
return []
}
var searchResults: [dataSourceType] = []
func searchItem(namedLike searchQuery: String) {
searchResults = search(keyword: searchQuery)
}
}
附注: 我尝试将名为 TestSource 的结构作为数据源。我提到了
typealias dataSourceType = TestSource
然后代码编译。似乎它只发生在协议中。
public struct TestSource: ZPPickerDataSource {
public var uuID: String = ""
public var displayString: String = ""
public var sampleVar = ""
}
【问题讨论】:
标签: ios swift swift-protocols type-alias