我想用泛型來簡化一些XML反序列化,但是,Swift 2.0令人窒息,說我沒有在我的方法簽名中使用泛型。我很困惑,爲什麼它拋出這個錯誤,因爲我直接實例化傳入的類類型。對此錯誤的原因有任何建議?確切的錯誤是:Generic parameter 'T' is not used in function signature
使用泛型參數時出現Swift錯誤
MTXMLDeserializable是我使用的基類,有方法:init(properties: Dictionary<String, String>?, propertyMap: Dictionary<String, String>?)
這裏是有問題的方法:
func transformResponse<T: MTXMLDeserializable>(responseData: XMLIndexer?) -> [MTXMLDeserializable]? {
if let data = responseData {
let properties = data["body"].children
return properties.map {
(xmlProps) -> MTXMLDeserializable in
let objProps = xmlProps.element!.attributes
return (T.self as T.Type).init(properties: objProps, propertyMap: self.propertyMap)
}
} else {
return .None
}
思考,它可以使用被窒息封閉的通用內部傳遞給properties.map
我重寫了這樣的方法:
func transformResponse<T: MTXMLDeserializable>(responseData: XMLIndexer?) -> [MTXMLDeserializable]? {
if let data = responseData {
let properties = data["body"].children
let objs = NSMutableArray()
for xmlProps in properties {
let objProps = xmlProps.element!.attributes
let obj = (T.self as T.Type).init(properties: objProps, propertyMap: self.propertyMap)
objs.addObject(obj)
}
return objs as! NSArray
} else {
return .None
}
即使sw從(T.self as T.Type).init(properties: objProps, propertyMap: self.propertyMap)
癢到僅僅使用T(properties: objProps, propertyMap: self.propertyMap)
不能解決問題。
我已經與swift編譯器在這方面進行了戰鬥,並升級到Swift 2.0希望我可以解決這個問題,但成功有限(在Swift 1.2中它使編譯器崩潰,至少現在它拋出一個錯誤)。
我可以讓這個類的子類傳遞它們自己的閉包來實例化它們期待的類型,並使用泛型爲此,但我認爲這很好,乾淨並且節省了編寫所有這些重寫的方法。
感謝您的關注和任何幫助表示讚賞!
你給** **的另一個例子。顯然,OP正在尋找' - > [T]?'。但你確實解決了我的難題。無論在「<>」裏面,與方法簽名無關。 **或者**括號內的輸入參數(如答案中所示),其中參數或輸出/返回類型必須是「T」類型(如接受的答案中所示) – Honey