2017-08-01 122 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