2016-09-26 71 views
4

Swift 3具有introduced@discardableResult註釋,用於禁用未使用函數返回值的警告。在Swift中對閉包使用@discardableResult

我正在尋找一種方法來消除此封閉警告。

目前,我的代碼如下所示:

func f(x: Int) -> Int -> Int { 
    func g(_ y: Int) -> Int { 
    doSomething(with: x, and: y) 
    return x*y 
    } 
    return g 
} 

在不同的地方,我叫f一次獲得封g,我然後調用多次:

let g = f(5) 
g(3) 
g(7) 
g(11) 

在大多數地方,我只關注嵌套調用doSomething的副作用,而不關閉g的返回值。在Swift 3中,我的項目中有數十個警告提示未使用的結果。除了將撥打電話g改爲_ = g(...)以外,是否有辦法抑制警告?我找不到可以放置@discardableResult註釋的地方。

+0

請看一看這個:) https://swift.org/documentation/api-design-guidelines/ – PeejWeej

+0

它似乎並不喜歡這個是可能的,但它似乎應該加上一些東西。您可能想看看是否有任何討論:https://github.com/apple/swift-evolution – PeejWeej

+0

API設計指南如何幫助您? – Theo

回答

5

我不認爲有一種方法可以將該屬性應用於閉包。你可以捕捉你的封蓋,另一種丟棄結果:

func discardingResult<T, U>(_ f: @escaping (T) -> U) -> (T) -> Void { 
    return { x in _ = f(x) } 
} 

let g = f(5) 
g(3) // warns 
let h = discardingResult(g) 
h(4) // doesn't warn