swift泛型可以与泛型一起在类内使用吗

swift泛型可以与泛型一起在类内使用吗,swift,generics,Swift,Generics,我有一个可解码的协议调用: public protocol Decodable { typealias DecodedType = Self static func decode(e: Extractor) -> DecodedType? } 我有一个函数解码: public func decode<T: Decodable where T.DecodedType == T>(object: AnyObject) -> T? { 和typealias-

我有一个可解码的协议调用:

public protocol Decodable {
    typealias DecodedType = Self
    static func decode(e: Extractor) -> DecodedType?
}
我有一个函数
解码

public func decode<T: Decodable where T.DecodedType == T>(object: AnyObject) -> T? {
typealias-ServerResponse=[String:AnyObject]
我试着称之为:

let responseParser = RestApiResponseParser<MyModel>(responseData: inputObject as! NSData)
let processError = responseParser.processResponseData()
let responseParser=RestApiResponseParser(responseData:inputObject as!NSData)
让processError=responseParser.processResponseData()
不幸的是,我遇到编译时错误:


这是否意味着,我不能在泛型类中使用泛型函数?

是的,您可以在泛型类中使用泛型函数。您的问题是,您正在将
[String:AnyObject]
字典(它是结构,而不是
AnyObject
)传递到一个函数中,该函数需要
AnyObject
。看起来您需要使用其键从字典中提取
AnyObject

if let object = response["<insert your key here>"] {
    decode(object)
}

顺便说一句,
Dictionary
NSDictionary
之间的桥梁并不像苹果声称的那样“看不见”——我遇到过这样的情况,我无法理解为什么Swift不能为我自动桥接它们,以及何时我必须明确。有一些不一致的地方,就像你提到的那样。您的函数将一个
字典
作为一个参数放在一个位置,而不是另一个位置,没有明确的理由说明原因。也许这与您使用的是
typealias
有关,但我不确定。

ServerResponse
结构吗?如果是这样,那么它就不是一个
AnyObject
,这就是为什么会出现错误。@RomanSausarnes很抱歉混淆:
typealias ServerResponse=[String:AnyObject]
@user1284151是一个结构,字典是structs@Kametrixom这一个编译:
let x:MyModel?=解码([“字符串”:2])
。我还尝试强制转换到NSDictionary当您将字典传递给接受
AnyObject
的函数时,它会自动桥接到NSDictionary,这就是为什么这样做
let x:MyModel?=解码([“字符串”:2])
不会生成该错误在某些情况下,Swift可以在幕后将字典转换为
NSDictionary
——这是一个类(而不是结构)。有时您可以手动转换到
NSDictionary
。查看我编辑的答案。仍然没有编译,但出现错误:无法调用类型为的解码(NSDictionary)
if let object = response["<insert your key here>"] {
    decode(object)
}
let link: T? = decode(response as NSDictionary)