Swift - Как получить расширенный класс из протокола?
Есть ли способ получить тип Class или тип Struct, который расширил мой протокол?
Вот мой пример кода:
protocol a {}
extension a {
static func list(completion: ([StructType] -> Void)) {
var items = [StructType]()
...
completion(items)
}
}
struct b{}
extension b: a {}
struct c{}
extension c: a{}
В этом случае я хочу динамически получить тип struct a и b, чтобы я мог сгенерировать его список и вернуть.
Заранее благодарю за любезный ответ на мой вопрос.
1 ответ
Решение
Использовать Self
ключевое слово
protocol P {
init()
}
extension P {
static func list(completion: ([Self]) -> Void) {
let items = [Self(), Self(), Self()]
print(Self.self)
completion(items)
}
}
struct B {}
extension B: P {}
class C {
required init() {}
}
extension C: P {}
B.list{ print($0) }
C.list{ print($0) }