Swift: 符合某个协议的AnyClass变量

5
我有一个静态函数,我想在符合协议的类上调用它。
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
1个回答

5

您试图使用 C.self 存储的对象类型是 C.Type

类型 C 符合协议 P

如果您想通过确保其符合 P 来存储对象,请使用 P.Type 作为类型。

例如:

let myObject: P.Type = C.self;
myObject.f();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接