2017-08-01 125 views
0

我有签名的方法:传递一个类型变量作为参数斯威夫特

func relatedObject<T: SomeType>(for type: T.Type) -> SomeRelatedObject 

我有一个SomeType.Type变量,我想以某种方式调用的方法,如:

let typeVariable: SomeType.Type = ... 
let result = relatedObject(for: typeVariable) 

但我得到一个错误:

Cannot invoke 'relatedObject' with an argument list of type '(for: SomeType.Type)' 

是否有可能以某种方式实际调用该方法具有类型VA可变结构?

+1

是'SomeType'协议? (如果它是一个具体的类型,你的代码应该工作)。比较[为什么我无法将Protocol.Type传递给通用T.Type参数?](https://stackoverflow.com/q/45234233/2976878) – Hamish

+0

确实如此,它是一个协议。谢谢!不知道有什么区别。 –

回答

0

你需要调用它

relatedObject(for: SomeType.self) 

这里,而不是SOMETYPE你可以通过任何类/结构符合SOMETYPE。假设你的CustomClass符合SomeType,那么你可以通过它像

relatedObject(for: CustomClass.self) 
+0

但是OP想要传递一个'SomeType.Type'给函数,而不是'SomeType.Protocol'(在这种情况下就是'SomeType.self')。 – Hamish