我有一个协议,定义了从服务器获取对象数组的能力。 Result
中定义了protocol BulkFetchable {
static func fetch(limit : Int, skip : Int, completionHandler : ((request : NSURLRequest?, response : NSHTTPURLResponse?, result : Result<[Self]?>) -> Void)) -> Request
}
:
extension BulkFetchable where Self : Mappable {
static func fetch(limit: Int, skip: Int, completionHandler: ((request: NSURLRequest?, response: NSHTTPURLResponse?, result: Result<[Self]?>) -> Void)) -> Request {
return Alamofire.request(.GET, "http://localhost:4567/users.json", parameters: ["limit" : limit, "skip" : skip], encoding: .URL, headers: nil).responseArray(completionHandler)
}
}
我使用通用实现来扩展此协议(忽略端点为此问题的目的而修复的事实):
Request
我正在使用Alamofire T
的扩展程序,它将JSON响应转换为T
类型的可选数组,其中Mappable
采用extension Request {
func responseArray <T : Mappable> (completionHandler: (NSURLRequest?, NSHTTPURLResponse?, Result<[T]?>) -> Void) -> Self {
return responseJSON(completionHandler: { (req, res, result) -> Void in
switch result {
case .Success(let json):
completionHandler(req, res, .Success(Mapper<T>().mapArray(json)))
break
case .Failure(let data, let error):
completionHandler(req, res, .Failure(data,error))
break
}
})
}
}
:
User
然后,我给我的extension User : BulkFetchable {}
模型这个能力:
Self
唉,我收到错误:
协议'BulkFetchable'要求 'fetch(_:skip:completionHandler :)'不能被非决赛所满足 class('User')因为它在非参数非结果中使用'Self' 类型位置
我该怎么做才能解决这个问题?我希望User
在User
扩展的上下文中自动变为<script src="~/Scripts/Items.js"></script>
<div ng-app="SearchModule">
<div ng-controller="SearchSomething" class="col-md-1">
<input class="searchClass" type="text" placeholder="Search" />
</div>
</div>
,但这可能是由于我缺乏理解。