2016-03-14 3 views
2

У меня есть статическая функция, которую я хочу вызвать в классе, соответствующем протоколу.Swift: переменная AnyClass, соответствующая протоколу

protocol P { 
    static func f(); 
} 

class C: P { 
    static func f() {} 
} 

Есть ли способ хранить C.self в качестве переменной с типом, который соответствует протоколу? Ниже не компилируется, но это то, что я идеально пытаюсь сделать:

let a: AnyClass<P> = C.self; 
a.f(); 
+1

Почему не могу просто использовать протокол в качестве типа? 'let a: P = C.self' – tskulbru

ответ

2

Тип объекта, который вы пытаетесь сохранить с C.self является C.Type.

Тип C соответствует протоколу P

Если вы хотите сохранить свой объект, гарантируя, что соответствует P, используйте P.Type как тип.

Пример:

let myObject: P.Type = C.self; 
myObject.f(); 
Смежные вопросы