swift - 在闭包调用者中使用泛型
问题描述
我有 2 个重载函数,我正在尝试使用它们在调用者中使用泛型的签名来调用它们。例如:
func sum(_ i: Int, _ s: Int){
print("sum \(i+s)")
}
func sum(_ i: String, _ s: Int){
var res: String="";
for _ in 1...s{
res += i
}
print("Repeat \(res)")
}
func sumCaller<T>(_ f: T){
print(type(of: f)) // compiler prints the value is function (Int,Int)->Void !!!
}
sumCaller(sum as (Int, Int)->Void)
这里一切都很好。但是当我试图像这样打电话f
时sumCaller
func sumCaller<T>(_ f: T){
print(type(of: f)) //compiler prints the value is function (Int,Int)->Void !!!
f(1,3)
}
编译器抛出错误:
error: testing.playground:68:5: error: cannot call value of non-function type 'T' f(1,3)
但它仍然是我作为sumCaller
参数传递的同一个函数。拜托,有人可以解释我的错误吗?
解决方案
我不确定你的目标是什么,但下面的代码“做某事”。希望这是您正在寻找的:
func sum(_ i: Int, _ s: Int){
print("sum \(i+s)")
}
func sum(_ i: String, _ s: Int){
var res: String="";
for _ in 1...s{
res += i
}
print("Repeat \(res)")
}
func sumCaller<A, B>(_ f: (A, B) -> Void, a: A, b: B) {
print(type(of: f)) // compiler prints the value is function (Int,Int)->Void !!!
f(a, b)
}
sumCaller(sum, a: 2, b: 3)
sumCaller(sum, a: "Test", b: 3)
推荐阅读
- azure - Azure QnA Maker 需要有关数据源的建议
- laravel - 我怎样才能通过 eloquent 和 group by 获取所有日期,甚至是没有记录的日期?
- bots - 根据对嵌入的反应为新用户添加经过验证的角色
- php - 内存不足时如何重启 HTTPD 服务器?
- python - 使用不同于 utf8 的编码从 Python 写入数据库
- kotlin - 无法提供来自子组件的依赖
- ember.js - 我应该从 LTS 升级到另一个 LTS ember 版本吗?
- sql - 对 hive 中的特定列进行 GROUP BY
- django - django 无法将所有事件保存在数据库中
- python - 删除列表中的模式