gpt4 book ai didi

swift 错误 : Generic parameter 'T' is not used in function signature

转载 作者:搜寻专家 更新时间:2023-10-31 21:53:38 24 4
gpt4 key购买 nike

我正在尝试使用泛型来简化一些 XML 反序列化,但是,Swift 2.0 令人窒息地说我没有在我的方法签名中使用泛型。我很困惑为什么它会抛出这个错误,因为我直接实例化了传入的类类型。关于这个错误的原因有什么建议吗?确切的错误是:

Generic parameter 'T' is not used in function signature

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
}

甚至从 (T.self as T.Type).init(properties: objProps, propertyMap: self.propertyMap) 切换只使用 T(properties: objProps, propertyMap: self.propertyMap)不能解决问题。

我已经就此与 swift 编译器进行了较量,并升级到 Swift 2.0,希望我能以有限的成功解决这个问题(在 Swift 1.2 中它使编译器崩溃,至少现在它会抛出一个错误)。

我可以让此类的子类通过它们自己的闭包来实例化它们期望的类型,并为此放弃使用泛型,但我认为这很好而且干净,并且节省了编写所有那些重写方法的时间。

感谢您的浏览,我们将不胜感激!

最佳答案

您使用通用 T 但您没有在方法主体的任何地方使用它。这就是错误的原因。

例如它可能应该是这样的:

func transformResponse<T: MTXMLDeserializable>(responseData: XMLIndexer?) -> [T]? {
if let data = responseData {
let properties = data["body"].children
return properties.map {
(xmlProps) -> T in
let objProps = xmlProps.element!.attributes
return (T.self as T.Type).init(properties: objProps, propertyMap: self.propertyMap)
}
} else {
return .None
}

关于 swift 错误 : Generic parameter 'T' is not used in function signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com