“表达结果未使用”是什么意思?

时间:2013-11-04 07:16:10

标签: objective-c compiler-warnings

我按照您开始提问时出现的链接解决了问题 他们告诉我怎么样,但不是为什么...... 所以我的问题是要理解编译器警告语言

在Xcode中 我想要一个触发AlertView的按钮来假设用户输入的结果:

UITextField *textfield = [alertView textFieldAtIndex:0];
circumference = [textfield.text floatValue];
NSString *myString = textfield.text;
[_myButton setTitle:(@"%@",myString) forState:UIControlStateNormal];

嗯,它有效,加上警告 我应该在这里提出我的问题: 警告说“表达结果未使用”。他们怎么想的?我正在使用表达式的结果 - 就在按钮上。

对于那些有关的人,这是修复:

UITextField *textfield = [alertView textFieldAtIndex:0];
circumference = [textfield.text floatValue];
[_myButton setTitle:[NSString stringWithFormat:@"%@",textfield.text] forState:UIControlStateNormal];

2 个答案:

答案 0 :(得分:1)

[_myButton setTitle:(@"%@",myString) forState:UIControlStateNormal];

没什么意义。我实际上会期望语法错误,但由于comma operator

(@"%@",myString)

实际上就像写作

({
    @"%@";
    myString;
})

所以你写的相当于

[_myButton setTitle:({
    @"%@";
    myString;
}) forState:UIControlStateNormal];

(如果有人想知道,是的,this is valid syntax as well。)

因此最终(@"%@",myString)评估为myString,但表达式@"%@"未使用,您会收到警告。

setTitle:forState:期望NSString作为第一个参数,而您恰好已经有NSString,名为myString

只做

[_myButton setTitle:myString forState:UIControlStateNormal];

答案 1 :(得分:0)

您在变量textfield中收到了myString的值,但您没有在其他地方使用它。这就是为什么你得到了警告"表达结果未使用" 。只需删除该行。

UITextField *textfield = [alertView textFieldAtIndex:0];
circumference = [textfield.text floatValue];
//NSString *myString = textfield.text;
[_myButton setTitle:textfield.text forState:UIControlStateNormal];