我的问题与已标记的问题无关,因为我想立即调用这两个函数。
当我可以在一行中调用两个函数时,我正在寻找解决方案。
这是游乐场代码。
import UIKit
func aFunc(file:String = #file, line:Int = #line, funcname:String = #function) {
print("file: \(file)")
print("line: \(line)")
print("function: \(funcname)")
}
func bFunc(num:Int, thing:String) {
for i in 1...num {
print("\(thing)\n")
}
}
func cFunc() {
bFunc(num: 1, thing: "I Swift!")
aFunc()
}
cFunc()
以上代码工作正常。并将此作为输出。
I Swift!
file: TestFunctions.playground
line: 19
function: cFunc()
但是,我有必要在一起调用bFunc( )
和aFunc( )
。
我不想像你在游乐场代码中看到的那样去做。
我想要类似的东西或更好的方式:
func cFunc() {
bFunc(num: 1, thing: "I Swift!").aFunc()
}
因此它会像游乐场代码一样输出。
我该怎么做才能实现这个目标?
我想做的原因是我编写了很多代码,现在我只是不想进行更改来实现此功能。
答案 0 :(得分:1)
问题是函数在Swift中有一个特定的签名。如果您知道要调用的两个函数的签名,您可以概括调用它们的概念。
例如,让我们采用最简单的情况,我们的函数不带参数并且不返回任何结果:
func f() {print("f")}
func g() {print("g")}
func h() {print("h")}
现在我们可以编写一个通用函数来连续调用 any 中的两个
func call(_ aFunction:()->(), and anotherFunction:()->()) {
aFunction()
anotherFunction()
}
以下是测试方法:
call(h, and:f)
在某些情况下,手头有一个普遍的call
函数就是有用的。但是,正如我所说,你这样做的能力取决于被称为成功插入call
参数类型的函数的签名。你不能只将任何旧函数传递给call
,因为Swift有严格的输入。