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)
...或者它只让我传递一个泛型函数的特定实例?
如果可以,请说明定义接受泛型函数作为参数的函数的语法。
如果不支持,则解决方法是将泛型函数定义为struct或其他方法,并传递而不是传递。这并不理想,因为消费函数没有得到如此好的调用语法,他们需要这样做:
func doAttaching(attach: Attacher) {
attacher.attach(anIntService, to: 42)
attacher.attach(aStringService, to: "Hello World")
}
答案 0 :(得分:4)
此功能通常称为Higher-Kinded Types(HKT),目前在Swift中不受支持。
答案 1 :(得分:0)
是的,这是一个例子:
func identity<T>(param: T) -> T {
return param
}
func callFunction<U>(function: U->U, paramater: U) -> U {
return function(paramater)
}
let param = 123
let result = callFunction(identity, paramater: param);
print(result)