Function 如何通过引用传递函数
我试图解决这个问题: 创建一个接受整数数组的函数,该函数通过引用传递,将对数组执行操作并返回Int结果 我有问题。在多次搜索都没有结果之后,我将问题分解成代码片段,单独测试每一个片段 我简单的“通过参考代码传递函数”是: 如果我这样做:Function 如何通过引用传递函数,function,swift,pass-by-reference,Function,Swift,Pass By Reference,我试图解决这个问题: 创建一个接受整数数组的函数,该函数通过引用传递,将对数组执行操作并返回Int结果 我有问题。在多次搜索都没有结果之后,我将问题分解成代码片段,单独测试每一个片段 我简单的“通过参考代码传递函数”是: 如果我这样做: func counter(end:Int)->String{ for var i = 0 ; i<end; ++i{ println("I => \(i)") } return "Done" } func test(i:I
func counter(end:Int)->String{
for var i = 0 ; i<end; ++i{
println("I => \(i)")
}
return "Done"
}
func test(i:Int, inout f:(Int)->String){
f(i)
}
var f1 = counter
test(5,&f1)//pass a reference as an argument to the function
func计数器(结束:Int)->字符串{
对于变量i=0;iString){
f(i)
}
变量f1=计数器
test(5,&f1)//将引用作为参数传递给函数
这是通过参考吗?由于这是有效的,我不确定这是正确的
我做错了什么?如果参数和返回类型匹配,只需按原样传递函数即可
你根本不需要
&…
。编译器告诉你inout f:(Int)->String
与counter()
函数的函数类型不同。如果你从test
函数中删除inout
关键字,并在函数调用中删除&
,一切正常
您确定练习没有要求您通过引用传递数组吗?首先,通过引用传递(
inout
)例如,您需要在被调用函数中指定参数,并将其指定给调用范围中传递的变量,或者需要在其上调用mutating
方法,并将其反映在调用范围中,等等
您没有在test
内部分配给f
。因此,将其设置为inout
,是毫无意义的,因为它限制了可以传递给它的内容
要从技术上回答出现错误的原因,答案是不能通过引用传递常量变量(即let
),而计数器
是常量变量(不能分配给计数器
)。您可以将定义顶层函数的func
语法想象为类似于带有闭包表达式的let
:
func counter(start:Int)->String{ ... }
就像
let counter : Int->String = { (start:Int)->String in ... }
嗨,是的,练习来自SAMs手册“24小时学习swift”具体要求如下…创建一个函数,返回一个整数,并将整数数组和对函数的引用作为参数。这个新函数应该将提供的函数应用于数组并返回结果。啊…我敢打赌这本书使用的是术语“引用”在这种情况下,非技术性。它不是告诉您通过引用传递函数,而是告诉您创建一个函数,然后创建另一个将其作为参数的函数。您作为参数传递的函数名将是“引用”在这种情况下,虽然也不是严格的技术术语。你不能在Swift中通过引用传递函数。这是不可能的。没有所谓的
inout
函数参数。Helen,您好,上述方法确实有效,但除非函数作为参数传递给另一个函数时,在Swift中通过引用传递,否则我不会真正按照书中所述做练习;即创建一个函数,该函数返回一个整数,并将整数数组和对函数的引用作为参数。此新函数应将提供的函数应用于数组并返回结果。感谢您的回答newacct。很抱歉再次打扰您,但您能否解释一下您是如何做的在Swift中,是否通过引用另一个函数来定义函数?@Mortoman:您也可以这样做。但通过引用传递的变量必须是用var
声明的变量。
func counter(start:Int)->String{ ... }
let counter : Int->String = { (start:Int)->String in ... }