Я пытаюсь выяснить, как использовать протокол, который имеет требование «Я» или связанное с ним требование внутри другого протокола. Рассмотрим следующий пример:Использование общего типа протокола внутри другого общего типа протокола
protocol SortBy {
static var values: [Self] { get }
var title: String { get }
}
protocol Filter {
var sortBy: SortBy { get set }
init(_ filter: Self)
static func == (lhs: Self, rhs: Self) -> Bool
static func != (lhs: Self, rhs: Self) -> Bool
}
Я знаю, что с SortBy
содержит ссылку на Self
, я могу использовать его только в качестве общего ограничения. Я не знаю, есть ли какая-нибудь магия Swift, которую я могу сделать, чтобы позволить то, что я пытаюсь достичь?
В конце концов я хочу использовать протоколы для примера следующим образом:
enum Sort: SortBy {
case sort1
case sort2
static var values: [Sort] {
return [
.sort1,
.sort2
]
}
var title: String {
switch self {
case .sort1:
return "Sort 1"
case .sort2:
return "Sort 2"
}
}
}
struct FilterExample: Filter {
var sortBy: SortBy
init(_ filter: FilterExample) {
...
}
static func == (lhs: FilterExample, rhs: FilterExample) -> Bool {
...
}
static func != (lhs: FilterExample, rhs: FilterExample) -> Bool {
...
}
}
И в случае, если это имеет значение, я использую Swift 3.
Спасибо за помощь заранее.
Спасибо, что сделал. – RPK