Swift 具有可以作为参数传递的一流函数。
func a() {
}
func b(x: ()) {
}
// Pass a to b…
b(a)
Swift 具有通用功能。
func generic<T>(x: T) {
}
但是,Swift 是否允许我将泛型函数作为参数传递给另一个函数?
let anIntService = Service<Int>()
let astringService = Service<String>()
func attach<T>(service: Service<T>, to value: T) {
// Perform type safe attaching of `value` to `service`.
}
func doAttaching(attach: (Service<T>, to T)->Void) {
attach(anIntService, to: 42)
attach(aStringService, to: "Hello World!")
}
doAttaching(attach)
…或者它只让我传递一个通用函数的特定实例?
如果可能,请说明定义接受泛型函数作为参数的函数的语法。
如果这不受支持,解决方法是将泛型函数定义为结构或其他东西的方法,并传递 an 而不是。但这并不理想,因为消费函数没有得到如此好的调用语法,他们需要这样做:
func doAttaching(attach: Attacher) {
attacher.attach(anIntService, to: 42)
attacher.attach(aStringService, to: "Hello World")
}