iOS Swift Vapor 關於 解析 Swift 中的 @discardableResult

當寫 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 屬性即可。但是,還是要考慮是否真的需要忽略該類 警告,因爲有些情況下及時處理返回結果可能是一種更好的解決方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章