Xcode 8 / Swift 3: “Expression of type UIViewController? is unused” warning

在Xcode8.0 / Swift3.0 下出现⚠️警告,一直是这么使用的,没有出错,这个错误让人摸不着头脑,


代码中的警告.png


最终还是找到了解决办法:

_ = navigationController?.popViewController(animated: true)

解释:

popViewController(animated:)

returns UIViewController?,
这样的话,编译器警告,因为你不是捕捉价值。解决方案是将其分配给一个下划线(或者理解为强调没有返回值)

Swift3.0 的变化

在Swift3.0 之前,所有方法默认情况下有一个“可废弃的结果”。当你没有捕获方法返回的时候没有警告会出现。
为了告诉编译器应该捕获结果,您必须在方法声明之前添加@warn_unused_result。它将被用于方法有一个可变的形式(例如、sort和sortInPlace)。可以添加@warn_unused_result(mutable_variant =“mutableMethodHere”)来告诉编译器。
然而,随着Swift 3.0 的飞速发展,现在所有方法返回值没有捕获到结果,都会出现警告说。
如果你想告诉编译器这里的警告是没有必要的,你可以在相对应的函数之前添加@discardableResult方法声明。如果你不想使用返回值,您必须显式地告诉编译器通过分配到下划线(或者是强调):

 _ = someMethodThatReturnsSomething()

为什么需要这样添加到Swift3.0中呢,

  1. 预防可能的错误(例如 使用排序的方式思考修改集合体)
  2. 明确的意图不捕获相应的结果 或 需要捕获结果为其他类型的数据

所以在UIKit API里面, 在使用popViewController(animated:) 的时候没有返回值不添加@discardableResult完全正常(这并不是普遍的现象)

最后

原文地址:查找出处:stackoverflow
了解更多:

  1. SE-0047 Swift Evolution Proposal
  2. Accepted proposal with revisions


文/守候的流年(简书作者)
原文链接:http://www.jianshu.com/p/2fe13d368959
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值