我有以下函数,该函数以前已经进行了干净的编译,但是使用Xcode 8会生成警告。
func exitViewController() { navigationController?.popViewController(animated: true) }
“未使用类型“ UIViewController?的表达式”。
为什么这么说,有没有办法将其删除?
该代码将按预期执行。
popViewController(animated:)返回UIViewController?,由于您没有捕获该值,编译器会发出警告。解决方案是将其分配给下划线:
popViewController(animated:)
UIViewController?
_ = navigationController?.popViewController(animated: true)
在Swift 3之前,所有方法默认都具有“可丢弃的结果”。当您没有捕获该方法返回的内容时,将不会发生任何警告。
为了告诉编译器应该捕获结果,您必须@warn_unused_result在方法声明之前添加。它可用于具有可变形式(例如sort和sortInPlace)的方法。您将添加内容@warn_unused_result(mutable_variant="mutableMethodHere")以告知编译器。
@warn_unused_result
sort
sortInPlace
@warn_unused_result(mutable_variant="mutableMethodHere")
但是,在Swift 3中,行为被翻转了。现在,所有方法都会警告未捕获返回值。如果要告诉编译器警告是不必要的,请@discardableResult在方法声明之前添加。
@discardableResult
如果不想使用返回值,则必须通过将其分配给下划线来 明确 告知编译器:
_ = someMethodThatReturnsSomething()
将其添加到Swift 3的动机:
UIKit API似乎落后于此,没有添加@discardableResult完全正常的(如果不是更常见的)用法,popViewController(animated:)而没有捕获返回值。