當(dāng)寫 Swift 方法時须误,你可能經(jīng)常會遇到這樣的場景:
有時候想要忽略方法的返回值挨稿,但有時候又需要處理返回值。
@discardableResult 屬性可以幫我們消除因方法返回值未被使用而出現(xiàn)的 警告 或 下劃線京痢。
雖然它是 Swift 中的一個小功能奶甘,但最好也了解下。
何時使用
考慮是否使用 @discardableResult 屬性是一件比較重要的事祭椰,因為它可以消除這一類的 警告臭家。
Result of call to ‘updateName’ is unused
如果整個項目中總是出現(xiàn)這類 警告 的話,也是挺討厭的方淤。
但是钉赁,也并不是說總是加 @discardableResult 屬性就是一個明智的選擇。上述示例中携茂,最好還是讓用戶處理下 APIProvider 方法的返回值比較好一些橄霉。
enum APIProvder {
static func updateName(_ name: String) -> Result<User, Error> {
// .. Handle API endpoint, example result:
return .success(User(name: name))
}
}
如代碼所示,返回結(jié)果也可能是一個 error 邑蒋,它會告訴用戶出錯了姓蜂。所以,是否需要使用 @discardableResult 屬性主要是取決于是否需要處理返回的結(jié)果医吊。
如何使用
上述示例中钱慢,如果不使用 @discardableResult 屬性的話,需要通過 下劃線 才能消除 警告卿堂。
final class UpdateNameViewController {
func didEnterName(_ name: String) {
/// The underscore makes the warning go away.
_ = APIProvder.updateName(name)
}
}
但是束莫,整個項目中過多的 下劃線 看起來并不簡潔。因此草描,這種情況下最好還是使用 @discardableResult 關(guān)鍵詞览绿。
enum APIProvder {
@discardableResult static func updateName(_ name: String) -> Result<User, Error> {
// .. Handle API endpoint, example result:
return .success(User(name: name))
}
}
總結(jié)
@discardableResult 屬性可能很少被人熟知,但是對于想消除方法返回值未被使用的 警告 來說的話穗慕,該屬性還是很有用的饿敲,只需要在對應(yīng)方法前添加 @discardableResult 屬性即可。但是逛绵,還是要考慮是否真的需要忽略該類 警告怀各,因為有些情況下及時處理返回結(jié)果可能是一種更好的解決方案倔韭。