Generics 如何在函数内部而不是在签名中使用泛型?[Swift 2]

Generics 如何在函数内部而不是在签名中使用泛型?[Swift 2],generics,swift2,Generics,Swift2,我正在尝试这样做: /:操场 进口可可 协议馈送项{ var foo:Int{get} } 协议feedfetch请求{ func fetchItems(成功:([T])->()) } 类MyFeedController{ func fetchItems(请求:T){ request.fetchItems{(items:[G])->()位于 //做事 } } } 但是,我得到一个错误通用参数“G”未在函数签名中使用。添加G作为可选返回值使我能够在内部使用它,但这似乎有点麻烦,因为我不想返回任何

我正在尝试这样做:

/:操场
进口可可
协议馈送项{
var foo:Int{get}
}
协议feedfetch请求{
func fetchItems(成功:([T])->())
}
类MyFeedController{
func fetchItems(请求:T){
request.fetchItems{(items:[G])->()位于
//做事
}
}
}

但是,我得到一个错误
通用参数“G”未在函数签名中使用
。添加G作为可选返回值使我能够在内部使用它,但这似乎有点麻烦,因为我不想返回任何内容。

发生错误的原因是编译器无法推断
G的类型,因为您无法提供任何参数或返回类型的详细信息

在本例中,您可以通过将类型指定为参数来帮助编译器:

func fetchItems<T:FeedFetchRequest, G:FeedItem>(request: T, type: G.Type)
也许
func fetchItems(请求:T,of Type:G.Type){…}
?无论如何,您必须以某种方式将G类型传递给函数,看看这个。您可以使用
typealias
来创建
FeedFetchRequest
一个通用协议,这样您就不需要在
fetchItems
签名中使用G
protocol FeedFetchRequest {
    func fetchItems(success success: [FeedItem]->())
}

class MyFeedController {
    func fetchItems<T:FeedFetchRequest>(request: T) {
        request.fetchItems{ (items: [FeedItem]) -> () in
            //do stuff
        }
    }
}