我有一个协议调用Decodable
:
public protocol Decodable {
typealias DecodedType = Self
static func decode(e: Extractor) -> DecodedType?
}
我有一个函数decode
:
public func decode<T: Decodable where T.DecodedType == T>(object: AnyObject) -> T? {
另外,我有一个班级RestApiResponseParser
class RestApiResponseParser<T where T:Decodable> {
private func createServerModels(response: ServerResponse) -> Result<T> {
var parsingError:NSError?
let link: T? = decode(response)
...
}
...
}
和typealias ServerResponse = [String: AnyObject]
我试着称之为:
let responseParser = RestApiResponseParser<MyModel>(responseData: inputObject as! NSData)
let processError = responseParser.processResponseData()
不幸的是,我收到编译时错误:
是不是意味着,我不能在泛型类中使用泛型函数?
答案 0 :(得分:1)
是的,您可以在泛型类中使用泛型函数。您的问题是您将[String: AnyObject]
字典(这是一个结构,而不是AnyObject
)传递给期望AnyObject
的函数。看起来您需要使用其密钥从字典中提取AnyObject
:
if let object = response["<insert your key here>"] {
decode(object)
}
另一种方法是将您的ServerResponse
投放到NSDictionary
这是一个类,因此可以作为AnyObject
传递:
let link: T? = decode(response as NSDictionary)
顺便说一下,Dictionary
和NSDictionary
之间的桥接并不像#34;无数&#34;正如Apple声称的那样 - 我遇到过这样的情况,我无法弄清楚为什么Swift无法为我自动桥接它们,当我必须明确时。你注意到的那些不一致。你的函数会将Dictionary
作为一个参数,而不是另一个,没有明确的理由。也许这与您使用typealias
这一事实有关,但我不确定。