2017-04-26 115 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)