如何忽略 swift 函数/方法的返回值

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

在 Swift 中写方法的时候,经常会遇到这样的情况:有时需要用到返回值,有时候不需要用到返回值。

举个例子,我们有个方法叫 updateUserInfo,更新用户信息,并返回更新之后的 User:

csharp 复制代码
class User {
    static func updateUserInfo() -> User {
        // 更新用户信息
        // ...
        // 返回最新的用户信息
        return User()
    }
}

当我们用到这个方法时:

swift 复制代码
let newUser = User.updateUserInfo()
print("最新的 User 为:\(newUser)")

但是如果我们仅仅想要更新用户,而不需要关心返回值,这时候系统会给我们一个警告:

一种解决这个警告的方式是使用下划线 _ 来忽略返回值:

ini 复制代码
_ = User.updateUserInfo()

swift 有更好的方式,就是今天要讲的 @discardableResult 关键字。

@discardableResult

@discardableResult 关键字允许我们标记一个带返回值的方法,从而忽略返回值,而不必处理烦人的警告,或者每次都要使用下划线。

只需要在方法的声明前面增加 @discardableResult 关键字即可:

swift 复制代码
class User {
    @discardableResult
    static func updateUserInfo() -> User {
        // 更新用户信息
        // ...
        // 返回最新的用户信息
        return User()
    }
}

当再次使用 User.updateUserInfo()方法,发现警告没有了。

为什么需要这个功能?

这看起来是个很小的功能,但如果不使用的话,整个项目可能充满了警告,消除这个警告之后整个项目就干净多了。

这个关键字的应用非常广泛,我在 swift 常用第三方库 Alamofire 里查了一下,竟然用到了 49 次。

什么情况下需要使用?

总结一下,以下情况应该用 @discardableResult:

  1. 当你的函数或方法有返回值,但在某些情况下调用者可能不需要使用这个返回值时。

  2. 当你想要消除因为没有使用函数或方法的返回值而产生的警告时。

然而,也不是所有情况都应该用这个关键字,在以下情况下最好不要不使用@discardableResult:

  1. 当函数或方法的返回值对于调用者来说总是重要且必须被处理时。例如,如果一个函数执行一些操作并返回一个错误(如果存在),那么你希望调用者应该处理这个错误。

  2. 有些时候如果忽略函数或方法的返回值可能导致错误或不正确的行为,则不应使用 @discardableResult。

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
初雪云1 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
Lancker3 小时前
没有 Mac 也能上架 iOS:GitHub Actions 全自动构建 + 签名 + TestFlight 送审实录
macos·ios·github
茶底世界之下3 小时前
晚霞要多暖?用 Awaking 只改色温做一次取舍
ios
酒神dnspup4 小时前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控
福兮说17 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
茶底世界之下1 天前
时间线效果层,为什么不能只复用一个处理器?
ios·swift
ZZH_AI项目交付1 天前
实时字幕负责快,本地录音负责不丢:一个 iOS 录音功能为什么需要两条链路
ios·ai编程
Cc.Y1 天前
Swift深度链接的极简之道
ios·cocoa·swift
AI砖家1 天前
iPhone Duo 上架新规:旧 App 怎么兼容,还能不能继续更新?
ios·cocoa·iphone·ios上架·ios上架新规
黑科技iOS上架1 天前
小蟹iOS混淆:Objective-C项目实战
ios·审核·ios混淆·执行程序差异化