在swift 里面這個函數(shù)嵌套是我理解起來有點稍微難受的知識點,記錄下
還是用那個最經典的例子來看一下
func chooseStepFunction(backwards: Bool) -> (Int) -> Int { func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } return backwards ? stepBackward : stepForward}var currentValue = -4let moveNearerToZero = chooseStepFunction(backwards: currentValue > 0)while currentValue != 0 { PRint("/(currentValue)... ") currentValue = moveNearerToZero(currentValue)}一般函數(shù)看起來如果有返回值的時候,格式是這個樣子的func 方法名字(參數(shù))-> 返回類型 {里面的一些運算}
而這個嵌套的函數(shù)在返回類型里是這樣子的 (Int)-> Int 抽出來不難理解,這個就是(參數(shù))-> 返回類型 ,這就是個發(fā)育不良的函數(shù)格式,在程序里面呢,要把它看做一個整體理解。我只需知道,通過最外面的函數(shù)返回的東西還是個函數(shù)。
就像我們上面的例子一樣
let moveNearerToZero = chooseStepFunction(backwards: currentValue > 0)這個moveNearerToZero就是個函數(shù)。往里面第一個函數(shù)choose里面看,發(fā)現(xiàn)不簡單,竟然又有兩個函數(shù),都是完全形態(tài),有參數(shù),有返回值,放在外面也可以獨立生活。我們不用管,只需要外面的返回函數(shù)類型,和里面要用的一直就好了。其實他們就是一個,往下看就一目了然了。
return backwards ? stepBackward : stepForward返回的是存在函數(shù)里的兩個函數(shù)名,條件滿足哪個就返回哪個,上面的moveNearerToZero接收了,再運行就是里面的函數(shù)了多個嵌套的話也是一樣的流程
新聞熱點
疑難解答