当写 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 属性即可。但是,还是要考虑是否真的需要忽略该类 警告,因为有些情况下及时处理返回结果可能是一种更好的解决方案。