我有以下功能,以前干净地编译,但使用Xcode 8生成警告.
func exitViewController()
{
navigationController?.popViewController(animated: true)
}
Run Code Online (Sandbox Code Playgroud)
"表达式类型"UIViewController?"未使用".
为什么要说这个,有没有办法删除它?
代码按预期执行.
tkt*_*ota 498
popViewController(animated:)返回UIViewController?,并且编译器正在发出警告,因为您没有捕获该值.解决方案是将其分配给下划线:
_ = navigationController?.popViewController(animated: true)
Run Code Online (Sandbox Code Playgroud)
在Swift 3之前,默认情况下所有方法都有"可丢弃的结果".如果未捕获方法返回的内容,则不会发出警告.
为了告诉编译器应该捕获结果,必须@warn_unused_result在方法声明之前添加.它将用于具有可变形式的方法(例如sort和sortInPlace).你会添加@warn_unused_result(mutable_variant="mutableMethodHere")告诉编译器.
但是,使用Swift 3时,行为会被翻转.现在所有方法都警告不会捕获返回值.如果要告诉编译器不需要警告,请@discardableResult在方法声明之前添加.
如果您不想使用返回值,则必须通过将其分配给下划线来明确告诉编译器:
_ = someMethodThatReturnsSomething()
Run Code Online (Sandbox Code Playgroud)
将此添加到Swift 3的动机:
sort它认为它修改了集合)UIKit API似乎落后于此,而@discardableResult不是在popViewController(animated:)不捕获返回值的情况下添加完全正常(如果不是更常见)的使用.
Cod*_*per 38
当生活给你柠檬时,做一个扩展:
import UIKit
extension UINavigationController {
func pop(animated: Bool) {
_ = self.popViewController(animated: animated)
}
func popToRoot(animated: Bool) {
_ = self.popToRootViewController(animated: animated)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,添加类似的内容@discardableResult func pop(animated: Bool) -> UIViewController?会导致您尝试避免的相同警告.
通过扩展,您现在可以编写:
func exitViewController()
{
navigationController?.pop(animated: true)
}
func popToTheRootOfNav() {
navigationController?.popToRoot(animated: true)
}
Run Code Online (Sandbox Code Playgroud)
编辑:也添加了popToRoot.
Mat*_*man 24
在Swift 3中,忽略具有声明的返回值的函数的返回值会导致警告.
选择退出此方法的一种方法是使用@discardableResult属性标记函数.由于您无法控制此功能,因此无法使用.
摆脱警告的另一种方法是将值赋值给_.这告诉编译器您知道该方法返回一个值,但您不希望将其保留在内存中.
let _ = navigationController?.popViewController(animated: true)
Run Code Online (Sandbox Code Playgroud)
虽然它work correctly if kept as it is但是number of warning increases.
解决方案replace it with underscore ( _ )虽然看起来很难看.
Eg. _ = navigationController?.popViewController(animated: true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47073 次 |
| 最近记录: |