如何同时调用两个函数?

时间:2017-05-03 13:05:24

标签: swift function

我的问题与已标记的问题无关,因为我想立即调用这两个函数。

当我可以在一行中调用两个函数时,我正在寻找解决方案。

这是游乐场代码。

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()
}

因此它会像游乐场代码一样输出。

我该怎么做才能实现这个目标?

我想做的原因是我编写了很多代码,现在我只是不想进行更改来实现此功能。

1 个答案:

答案 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有严格的输入。