【发布时间】:2015-09-05 07:23:42
【问题描述】:
我正在尝试做这样的事情:
//: Playground
import Cocoa
protocol FeedItem {
var foo: Int {get}
}
protocol FeedFetchRequest {
func fetchItems<T:FeedItem>(success success: ([T])->())
}
class MyFeedController {
func fetchItems<T:FeedFetchRequest, G:FeedItem>(request: T) {
request.fetchItems{ (items: [G]) -> () in
//do stuff
}
}
}
但是,我收到错误 Generic Parameter 'G' is not used in function signature。将 G 添加为可选返回值使我可以在内部使用它,但这似乎很老套,因为我不想返回任何东西。
【问题讨论】:
-
也许
func fetchItems<T:FeedFetchRequest, G:FeedItem>(request: T, ofType: G.Type) {...}?无论如何,您必须以某种方式将 G 类型传递给函数 -
或者,看看这个stackoverflow.com/questions/24469913/…,你可以使用
typealias使FeedFetchRequest成为一个通用协议,然后你就不需要在fetchItems签名中使用G了