引用 Swift 中的泛型函数
Reference to generic function in Swift
在Swift中,您可以以闭包的形式创建对函数的引用。例如:
func simpleFunc(param: Int) {
}
let simpleFuncReference = simpleFunc(param:) // works just fine
但在一种情况下,我有一个带有如下通用参数的函数:
func hardFunc<T: StringProtocol>(param: T) {
}
let hardFuncReference = hardFunc(param:) // "Generic parameter 'T' could not be inferred"
为了尝试消除该错误,我试图明确指定类型,但立即出现另一个错误。
func hardFunc<T: StringProtocol>(param: T) {
}
let hardFuncReference = hardFunc(param:) // "Cannot explicitly specialize a generic function"
有什么方法可以让我获得对 hardFunc
的引用作为闭包?
正如您已经猜到的,您必须稍微帮助进行类型推断:
func hardFunc<T: StringProtocol>(param: T) {
}
let hardFuncReference:(String) -> Void = hardFunc(param:)
请注意,您确实必须指定您专攻的特定类型,但在本例中,您可以通过指定要将闭包分配给的变量类型来完成。
你不能让它保持通用,除非你在通用上下文中指定它在同一类型上是通用的。所以这也行得通
struct Foo<T: StringProtocol> {
let hardFuncReference:(T) -> Void = hardFunc(param:)
}
在Swift中,您可以以闭包的形式创建对函数的引用。例如:
func simpleFunc(param: Int) {
}
let simpleFuncReference = simpleFunc(param:) // works just fine
但在一种情况下,我有一个带有如下通用参数的函数:
func hardFunc<T: StringProtocol>(param: T) {
}
let hardFuncReference = hardFunc(param:) // "Generic parameter 'T' could not be inferred"
为了尝试消除该错误,我试图明确指定类型,但立即出现另一个错误。
func hardFunc<T: StringProtocol>(param: T) {
}
let hardFuncReference = hardFunc(param:) // "Cannot explicitly specialize a generic function"
有什么方法可以让我获得对 hardFunc
的引用作为闭包?
正如您已经猜到的,您必须稍微帮助进行类型推断:
func hardFunc<T: StringProtocol>(param: T) {
}
let hardFuncReference:(String) -> Void = hardFunc(param:)
请注意,您确实必须指定您专攻的特定类型,但在本例中,您可以通过指定要将闭包分配给的变量类型来完成。
你不能让它保持通用,除非你在通用上下文中指定它在同一类型上是通用的。所以这也行得通
struct Foo<T: StringProtocol> {
let hardFuncReference:(T) -> Void = hardFunc(param:)
}