我有以下功能:
private func getFunctionToPlot() -> ((Double) -> Double) {
var function: (Double) -> Double = sin + cos
return function
}
我想返回一个带有double的函数并返回一个double,但是这个函数应该是sin + cos
。 sin和cos都是双重的并且返回一个double,但我怎样才能返回sin($0) + cos($0)
。
答案 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
}