【发布时间】:2016-09-10 04:11:00
【问题描述】:
Swift 具有可以作为参数传递的一流函数。
func a() {
}
func b(x: ()) {
}
// Pass a to b…
b(a)
Swift 有通用函数。
func generic<T>(x: T) {
}
但是,Swift 是否允许我将 generic 函数作为参数传递给另一个函数?
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")
}
【问题讨论】:
标签: swift function generics first-class