AFAIK,Swift 不允许您使用元类型作为泛型类型。(我相信这符合 Sam Giddins在 Swift 3 中所希望的。)
\n\n但是,您可以将其用作值。而不是制作T类型参数,而是将其作为属性:
protocol SomeProtocol {\n static func foo()\n}\n\nstruct Concrete: SomeProtocol {\n static func foo() {\n print("I am concrete")\n }\n}\n\nclass SomeClass {\n let T: SomeProtocol.Type\n\n init(T: SomeProtocol.Type) {\n self.T = T\n }\n\n func go() {\n T.foo() // no need for dynamicType\n }\n}\n\nSomeClass(T: Concrete.self).go()\nRun Code Online (Sandbox Code Playgroud)\n\n如果,正如您所说,您的协议仅包含静态方法,那么这就足够了。但是,如果您需要将泛型参数绑定到类型,\xe2\x80\x99s 也是可能的:
\n\nclass SomeClass<U: SomeProtocol> {\n let T: U.Type\n\n init(T: U.Type) {\n self.T = T\n }\n\n func go(value: U) {\n T.foo()\n }\n}\n\nSomeClass(T: Concrete.self).go(Concrete())\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |