2017-04-26 116 views
2

以下是基于调用的返回函数进行加法或减法的基本函数。Swift递归函数,返回类型Closure

func calculateFunc(_ inputValue:Int) -> (add:(Int)->(Int),sub:(Int)->(Int)){ 

    func addFunction(_ newValue:Int)->(Int){ 
     return inputValue + newValue 
    } 
    func subFunction(_ newValue:Int) -> Int { 
     return inputValue - newValue 
    } 
    return (addFunction,subFunction) 
} 

calculateFunc(4).add(2) 
calculateFunc(4).sub(1) 

我不知道以下是否可能。是否有任何递归函数的概念可以帮助?

calculateFunc(4)。新增(2).SUB(1)。新增(9)

+0

准确的目标是什么?只是为了实现这个语法'calculateFunc(4).add(2).sub(1).add(9)',或者通过单独使用函数来实现? – Alexander

+0

是的,以实现语法。但关闭不能延长。 – andyPaul

+0

我一直在玩它。我认为基本上需要一个函数来作为一个函数返回自己。我不认为这是可能的静态类型系统,就像斯威夫特的 – Alexander

回答

2

你需要写像下面

extension Int { 
    func add(_ value: Int) -> Int { 
     return self+value 
    } 

    func sub(_ value: Int) -> Int { 
     return self-value 
    } 
} 

然后,你可以调用函数Int延期如下

let x: Int = 5 
let y = x.add(1).sub(3)