當寫 Swift 方法時,你可能經常會遇到這樣的場景:
有時候想要忽略方法的返回值,但有時候又需要處理返回值。
@discardableResult 屬性可以幫我們消除因方法返回值未被使用而出現的 警告 或 下劃線。
雖然它是 Swift 中的一個小功能,但最好也瞭解下。
何時使用
考慮是否使用 @discardableResult 屬性是一件比較重要的事,因爲它可以消除這一類的 警告。
Result of call to ‘updateName’ is unused
如果整個項目中總是出現這類 警告 的話,也是挺討厭的。
但是,也並不是說總是加 @discardableResult 屬性就是一個明智的選擇。上述示例中,最好還是讓用戶處理下 APIProvider 方法的返回值比較好一些。
enum APIProvder {
static func updateName(_ name: String) -> Result<User, Error> {
// .. Handle API endpoint, example result:
return .success(User(name: name))
}
}
如代碼所示,返回結果也可能是一個 error ,它會告訴用戶出錯了。所以,是否需要使用 @discardableResult 屬性主要是取決於是否需要處理返回的結果。
如何使用
上述示例中,如果不使用 @discardableResult 屬性的話,需要通過 下劃線 才能消除 警告。
final class UpdateNameViewController {
func didEnterName(_ name: String) {
/// The underscore makes the warning go away.
_ = APIProvder.updateName(name)
}
}
但是,整個項目中過多的 下劃線 看起來並不簡潔。因此,這種情況下最好還是使用 @discardableResult 關鍵詞。
enum APIProvder {
@discardableResult static func updateName(_ name: String) -> Result<User, Error> {
// .. Handle API endpoint, example result:
return .success(User(name: name))
}
}
總結
@discardableResult 屬性可能很少被人熟知,但是對於想消除方法返回值未被使用的 警告 來說的話,該屬性還是很有用的,只需要在對應方法前添加 @discardableResult 屬性即可。但是,還是要考慮是否真的需要忽略該類 警告,因爲有些情況下及時處理返回結果可能是一種更好的解決方案。