传递一个类型变量作为参数斯威夫特
问题描述:
我有签名的方法:传递一个类型变量作为参数斯威夫特
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可变结构?
答
你需要调用它
relatedObject(for: SomeType.self)
这里,而不是SOMETYPE你可以通过任何类/结构符合SOMETYPE。假设你的CustomClass符合SomeType,那么你可以通过它像
relatedObject(for: CustomClass.self)
+0
但是OP想要传递一个'SomeType.Type'给函数,而不是'SomeType.Protocol'(在这种情况下就是'SomeType.self')。 – Hamish
是'SomeType'协议? (如果它是一个具体的类型,你的代码应该工作)。比较[为什么我无法将Protocol.Type传递给通用T.Type参数?](https://*.com/q/45234233/2976878) – Hamish
确实如此,它是一个协议。谢谢!不知道有什么区别。 –