如何返回依赖于两个函数的函数?

时间:2016-11-06 02:35:56

标签: swift swift3

我有以下功能:

private func getFunctionToPlot() -> ((Double) -> Double) {
    var function: (Double) -> Double = sin + cos
    return function

}

我想返回一个带有double的函数并返回一个double,但是这个函数应该是sin + cos。 sin和cos都是双重的并且返回一个double,但我怎样才能返回sin($0) + cos($0)

2 个答案:

答案 0 :(得分:2)

您的问题有点广泛,但您声称不会编译的行编译;你正在做什么并没有错。唯一的问题是您的代码不完整。以下是 完成的测试示例:

private func getFunctionToPlot() -> ((Double) -> Double) {
    var function: (Double) -> Double
    function = {_ in return 2.0}
    return function
}

编辑至于您修改后的问题,这里有一个您现在似乎想要做的事情的测试示例:

func sin(_ d:Double) -> Double {return 1}
func cos(_ d:Double) -> Double {return 1}
private func getFunctionToPlot() -> ((Double) -> Double) {
    let f1: (Double) -> Double = sin
    let f2: (Double) -> Double = cos
    return {f1(f2($0))} // or maybe f1($0) + f2($0)
}

答案 1 :(得分:2)

只需为功能指定闭包即可。 在您的代码段中,当前函数具有值" nil"并且由于返回类型不是"可选"(即,((Double) - > Double)?)因此返回类型不匹配。

一种可能的方法是为函数赋值:

private func getFunctionToPlot() -> ((Double) -> Double) {
    var function: (Double) -> Double
    function = { input in
        return input * 2
    }
    for element in brain.program {
        // do something
    }
    return function
}

另一种方法是使返回类型可选

private func getFunctionToPlot() -> ((Double) -> Double)? {
    var function: ((Double) -> Double)?
    for element in brain.program {
        // do something
    }
    return function
}