【问题标题】:Expected expression before ')' token')' 标记之前的预期表达式
【发布时间】:2010-09-23 02:31:32
【问题描述】:

我在使用 Objective-C 编写的程序时遇到问题。

我在 MainViewController.m 中有一个正在尝试的方法,如下所示。

- (void)updateLabels:(NSString *)text :(BOOL)isOn; 
{
[self setNameLabel:(text *); 
if (isOn)
 [self setOnLabel:(ON *);
else
  [self setOnLabel:(OFF *); 
}

我的目标应该从这段代码中显而易见。我可能做错了什么以获得错误消息Expected expression before ')' token

如果有任何帮助,我将不胜感激!

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    这看起来更像您正在尝试做的事情,即将文本分配给标签,然后切换它是打开还是关闭

    #define ON YES
    #define OFF NO
        - (void)updateLabels:(NSString *)text isOn:(BOOL)
            {
            [self setNameLabel:text]; 
            if (isOn)
             [self setOnLabel:ON];
            else
              [self setOnLabel:OFF]; 
            }
    

    【讨论】:

    • 在引发错误的方法声明末尾仍然有分号。
    【解决方案2】:

    这里有几个问题。首先,你不需要那个分号。其次,您不需要传递ONOFF 的指针:

    - (void)updateLabelsWithText:(NSString *)text AndOnState:(BOOL)isOn {
        [self setNameLabel: text]; 
        if(isOn)
            [self setOnLabel:@"ON"];
        else
            [self setOnLabel:@"OFF"];
    }
    

    【讨论】:

    • 多余的分号实际上是合法的,信不信由你。
    【解决方案3】:

    应该是:

     - (void)updateLabels:(NSString *)text status:(BOOL) isOn {
        ...
    

    您需要删除方法声明后的分号。第二个和后续参数都需要一个字段名称(状态)和一个用于将值放入的变量(isOn)。

    在接口声明中,您将左括号换成这样的分号:

     - (void)updateLabels:(NSString *)text status:(BOOL) isOn;
    

    然后调用它看起来像这样:

    [... updateLabels:@"My label text" status:YES];
    

    【讨论】:

    • -1 您不需要删除分号(信不信由你),您可以在选择器中使用裸冒号。
    • 哦,不知道。将分号留在选择器中并在选择器中使用裸冒号有什么影响?我假设它们将被归类为不太理想的做法,因为我没有在我看过的任何示例和书籍中看到它:-)
    • Clarkson:你说得对,你应该命名选择器中的所有参数,而且你很少会看到不这样做的代码。
    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    相关资源
    最近更新 更多