我不熟悉Swift编程。如何将print函数赋给变量并通过该变量在swift中调用?

var myPrint = print
myPrint("calling print function")//This line shows error

第二行(myPrint("calling print function"))显示此错误:
调用中缺少参数2的参数
操场执行失败:
错误:TestingPlayground.Playground:5:33:错误:调用中缺少参数2的参数
myprint(“调用打印函数”)
^

TestingPlayground.Playground:4:5:注:此处声明“我的指纹”
var myprint=打印
^

最佳答案

我相信您已经发现了Swift编译器的一个已知缺陷(或限制)。
The built-in print function有三个参数。参数1是未标记的,并且是类型String ...(variadic)。参数2具有labelseparator,是typeString,并且具有默认值。参数3具有labelterminator,是typeString,并且具有默认值。由于参数2和3具有默认值,因此可以像print("hello")那样调用它。
闭包(如myPrint)不能使用标记的参数。因此,myPrint采用三个未标记的参数。参数1是typeString ...(variadic)。参数2是typeString。参数3也是类型String。关闭参数不能有默认值,因此myPrint需要所有三个参数。您不能像myPrint("hello")那样调用它,因为您没有为参数2和3传递任何内容,而且它们没有(也不能)默认值。
在swift中,变量参数(如printmyPrint的参数1)会消耗所有参数,直到in到达标签。如果尝试调用myPrint("hello", " ", "\n"),则所有三个参数都将分配给参数1,并且没有任何参数分配给参数2和3。
由于不能在闭包中标记参数,因此无法调用myPrint闭包,因为无法传递参数2和3的值。
这是一个已知的限制。请参见SR-2475SR-494

关于swift - 将打印功能分配给变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48328273/

10-12 14:12