Я занимаюсь рефакторингом существующего кода и хотел бы попробовать создать общий протокол c, чтобы иметь возможность добавлять и искать данные по Int или по дате. В настоящее время у меня есть много функций, которые выглядят очень похожими:
func add(_ value: UInt8, at index: Int)
func add(_ value: UInt8, at date: Date)
func gridIndex(from index: Int) -> RowColumn
func gridIndex(from date: Date) -> RowColumn
Я хочу определить общий c протокол, подобный приведенному ниже, а затем иметь один класс, унаследованный от нескольких типов протокола c generi.
Как я могу получить класс Swift5 для реализации нескольких общих c протоколов?
protocol IndexedStorage {
associatedtype dataType
associatedtype keyType
func add(_ value: dataType, at: keyType)
func gridIndex(from: keyType) -> RowColumn
}
protocol IndexedStorageByInt: IndexedStorage { // where dataType == UInt8, keyType == Int {
typealias dataType = UInt8
typealias keyType = Int
}
protocol IndexedStorageByDate: IndexedStorage {
typealias dataType = UInt8
typealias keyType = Date
}
Я пробовал:
extension DataCanvas: IndexedStorage {
}
extension DataCanvas: IndexedStorageByInt {
//...
}
extension DataCanvas: IndexedStorageByDate {
//...
}
Мне нужен эквивалент:
extension DataCanvas: IndexedStorage<UInt8, Int>, IndexedStorage<UInt8, Date> {
func add(_ value: UInt8, at: Int) {...}
func add(_ value: UInt8, at: Date) {...}
func gridIndex(from: Int) -> RowColumn
func gridIndex(from: Date) -> RowColumn
}