2017-07-22 15 views
0

有人可以解釋爲什麼swift編譯器抱怨可選的「offset:」參數嗎?爲什麼在閉包func中使用可選參數時,Swift會拋出錯誤?

如果我通過零作爲參數incrementByFive(0)那麼它的工作原理。但是,爲什麼我懶得做,所以當我在閉包定義的默認值...

code and its error image... 下面的代碼:

func makeIncrementer(amount: Int) -> (Int?) -> Int { 
    var counter = 0 

    func incrementer(_ offset: Int? = 0) -> Int { 
     counter += amount + offset! 
     return counter 
    } 

    return incrementer 
} 


let incrementByFive = makeIncrementer(amount: 5) 
incrementByFive() 

回答

1

只有功能可以在斯威夫特默認參數,但不關閉。

makeIncrementer()返回的封閉件具有類型 (Int?) -> Int,即它需要Int?類型, 的一個參數並調用關閉時必須被提供。

SR-531 Allow default parameters in closure parameters比較,特別是評論

並沒有真正意義,如果你需要這種行爲,你應該使用功能。通常,所有提供的參數都是匿名的,因此不需要默認的參數值。

+0

我很快學習,所以這只是一個測試。 謝謝!瞭解。 – jack0088

相關問題