Вопрос относится к Swift3. Начиная с версии 4 вы можете, наконец, бросить объекты Type<Protocol>
так:Как передать протокол NSObject <Protocol> для доступа к ограниченному интерфейсу расширения?
someObject as (Type & Protocol)
У меня есть протокол и несколько типов наследования от него.
A, B, C, D: CKEntity (pseudocode)
Для этого протокола у меня есть случай, когда объект наследует от NSObject:
Расширения является:
extension CKEntity where Self : NSObject {
static func method() {
...
}
Работы perferctly для нескольких случаев.
И у меня есть функция, которая принимает класс (тип), который реализует CKEntity.
Мне нужно проверить, соответствует ли он случаю, если это также NSObject. И если это так, вызовите соответствующую функцию.
Прототип того, что я пытаюсь выполнить:
func validateSync(ofType type: CKEntity.Type) {
let a = (type as NSObject.Type & CKEntity.Type).self
a.method() // Compilation error: Type 'Any' has no member 'method'
}
не работает.
Вопрос:
Как бросить тип (Protocol.Type) в NSObject.Type (не экземпляр) для удовлетворения ограничений расширения?
Сценарий (повторение):
расширение для А, где А представляет собой В
может быть B
Нужно отдать А А: В и ограничено A & B интерфейс.