我有以下函数,该函数以前已经进行了干净的编译,但是使用Xcode 8会生成警告。
func exitViewController()
{
navigationController?.popViewController(animated: true)
}
“未使用类型“ UIViewController?的表达式”。
为什么这么说,有没有办法将其删除?
该代码将按预期执行。
popViewController(animated:)
返回UIViewController?
,由于您没有捕获该值,编译器会发出警告。解决方案是将其分配给下划线:
_ = navigationController?.popViewController(animated: true)
在Swift 3之前,所有方法默认都具有“可丢弃的结果”。当您没有捕获该方法返回的内容时,将不会发生任何警告。
为了告诉编译器应该捕获结果,您必须@warn_unused_result
在方法声明之前添加。它可用于具有可变形式(例如sort
和sortInPlace
)的方法。您将添加内容@warn_unused_result(mutable_variant="mutableMethodHere")
以告知编译器。
但是,在Swift
3中,行为被翻转了。现在,所有方法都会警告未捕获返回值。如果要告诉编译器警告是不必要的,请@discardableResult
在方法声明之前添加。
如果不想使用返回值,则必须通过将其分配给下划线来 明确 告知编译器:
_ = someMethodThatReturnsSomething()
将其添加到Swift 3的动机:
sort
认为它会修改集合)UIKit
API似乎落后于此,没有添加@discardableResult
完全正常的(如果不是更常见的)用法,popViewController(animated:)
而没有捕获返回值。
问题内容: 仅供参考:我是Swift的新手,所以这可能是一个非常简单的问题,但我 无法弄清楚。 我一直在关注 使用Xcode 8 beta和Swift 3 的《开始开发iOS应用程序 (Swift) 教程》。 我将Tap Gesture Recognizer附加到了Image View,然后 在ViewController.swift中添加了此操作: 在图像 视图上轻按以调用selectImage
如果我以通常的方式声明一个类,我可以使用类名作为类型: 但是,如果我通过将类表达式分配给变量来声明一个类,我就不能将该名称用作类型: 建议使用不起作用,因为我想要的实例类型,而不是类本身的类型。 typescript操场示例 如何获取以第二种方式定义的类的实例类型? 我对以这种方式定义类感兴趣的原因是,我希望有一个接口来描述某些类将具有的静态方法,如此处的手册中所述(该部分中的第三个示例)。 下面
假设我有一个map。现在我只想从中获取条目并创建一个新的map与这些条目。 我正在尝试做以下事情: 这似乎可行,但我得到了一个警告:类型模式(String,Int)中的非变量类型参数字符串未选中,因为它已被擦除消除。 我怎样才能摆脱警告?
#include <stdio.h> union Type { int a; int *b; }; int main() { printf("sizeof(union Type) is %lu\n", sizeof(union Type)); return 0; } 技巧 使用gcc -g编译生成的程序,是不包含union Type的符号信息: (gdb) p sizeof(
问题内容: 给这个: [未检查]未检查的方法调用:java.lang.Enum中的valueOf(java.lang.Class,java.lang.String)应用于(java.lang.Class,java.lang.String) 我不想使用泛型,因为这是一个重大更改。我不想压抑。我不明白为什么会发生此警告。我想这是因为无法扩展Enum类型。我明白了。但是我不明白为什么通配符类会抛出这个奇
问题内容: 我正在写一个堆栈,其中一个带有静态Node,另一个非静态。 但是,当我尝试使节点变为非静态时,它会发出以下警告:“类型参数E隐藏了类型E” 我已经告诉我一些理解,因为静态成员是类的成员,所以它不会给我警告,但是当我将其设为非静态时,它属于实例。但这不是一个清晰的想法。 问题答案: 这是警告您,已经在作用域中使用了通用参数名称。更改的通用参数名称将是解决警告的一种方法: 但是由于E已经存