我有一個快捷函數,我們稱之爲functionMakingMeUnhappy
。 functionMakingMeUnhappy
返回類型T
其中T
是SomeProtocol
類型。函數不接受給定的參數匹配定義
的定義是這樣的:
func functionMakingMeUnhappy<T:SomeProtocol>(meta: Metadata, value: Any, name: String) -> T
{
// Do some stuff and then return something as! T
return returnSomeStuff(meta, value: value, name: name) as! T
}
如果沒有任何用處的,元數據是看起來像這樣的結構:
public struct Metadata
{
var someUniqueIdentifier: String
var someOtherUniqueIdentifier: String
var someTypeIdentifier: String
var somePermission: String
var someOtherProperties = [String: Any]()
init(someUniqueIdentifier: String,
someOtherUniqueIdentifier: String,
someTypeIdentifier: String,
somePermission: String,
someOtherProperties: [String: AnyObject])
{
self.someUniqueIdentifier = someUniqueIdentifier
self.someOtherUniqueIdentifier = someOtherUniqueIdentifier
self.someTypeIdentifier = someTypeIdentifier
self.somePermission = somePermission
self.someOtherProperties = someOtherProperties
}
}
現在,我的問題,因爲愚蠢的,因爲它可能聲音,當我調用functionMakingMeUnhappy
具有完全相同的參數類型作爲函數定義時,我得到一個錯誤,說不能調用functionMakingMeUnhappy類型的參數列表(元數據,值:任何,名稱:字符串)'
的調用如下:
var data = Metadata(someUniqueIdentifier: "id",
someOtherUniqueIdentifier: "charType",
someTypeIdentifier: "type",
somePermission: "readonly",
someOtherProperties: [:]
)
var unhappy = functionMakingMeUnhappy(data, value: "someValue", name: "someName")
有一個通用的功能,可能是這個錯誤的原因時,有沒有什麼要求?
T應該如何解決? (並且,繼續這個想法,爲什麼這是一個通用的呢?) – matt
@matt因爲我發現關於「協議只能用作通用約束的工作,因爲它具有自我或相關類型要求」 –
你還在想我的問題嗎? T應該如何解決? – matt