【问题标题】:Hello world app你好世界应用程序
【发布时间】:2012-03-01 12:29:33
【问题描述】:

我刚刚涉足 iOS 平台上的编程世界,并制作了我的第一个 Hello World 应用程序。

我想在应用程序中添加额外的功能来学习更多的 Xcode 编程。

简而言之,应用程序会添加您在文本字段@hallo 中提供的输入,如果您不插入任何内容,它会显示 Hello World!。 (它添加了世界!)

现在我希望应用识别某个输入,因此如果我输入某个名称 (Kim),它不会给出标准响应“hello Kim!”但例如你好女孩!。

这是添加“世界!”的代码如果您让输入为空,则在“hello”之后,所以我认为这是为额外功能添加一些额外代码的地方。

这是我在HellowWorldViewController.m中说的代码

- (IBAction)changeGreeting:(id)sender {

    self.userName = self.textField.text;

    NSString *nameString = self.userName;
    if ([nameString length] == 0) {
        nameString = @"World";
    }

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
    self.label.text = greeting;
}

这是我想出的:

- (IBAction)changeGreeting:(id)sender {

    self.userName = self.textField.text;

    NSString *nameString = self.userName;
    if ([nameString length] == 0) {
        nameString = @"World";
    }
    if (String == "Kim") {
        nameString = @"Girl";
    }

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
    self.label.text = greeting;
}

我收到两个错误“预期表达式”和“使用未声明的标识符“字符串”;您的意思是“NSString”吗?

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    变化:

    if (String == "Kim") { nameString = @"Girl"; }
    

    到:

    if ([nameString isEqualToString:@"Kim"]) { nameString = @"Girl"; }
    

    你有两个问题:

    String 对您的程序没有任何意义,没有称为 String 的变量或类。你可能只是说nameString

    字符串的比较与使用== 不同,因此请改用isEqualToString

    == 检查身份。即这两个对象是否是同一个对象,是否指向内存中的同一个地址。

    isEqualTo 默认情况下做同样的事情,但可以被覆盖以执行不同的相等比较。 isEqualToString 就是这样,但更加明确。


    这可能不是您的代码的唯一问题,但这是我发现的最明显的问题。

    @Jim 发现了另一个问题:objective-c 中的字符串以 @ 符号开头。

    【讨论】:

    • 谢谢詹姆斯,你的代码做到了,谢谢你的清晰解释
    • 没问题。如果您认为我的回答对您最有帮助,请不要忘记将其标记为正确。
    【解决方案2】:
    if (String == "Kim") {
    

    这条线有几个问题。

    Objective-C 中的字符串文字的格式为 @"foo" - 您缺少 @

    您似乎想将nameString@"Kim" 进行比较,但您只是在使用String。这不是您正在使用的变量的名称。

    您无法将NSString 的实例与== 进行比较——它们是对象,而您所做的只是比较指针的内存地址。为了比较字符串,您应该使用其中一个字符串的isEqualToString: 方法。例如:

    if ([nameString isEqualToString:@"Kim"]) {
    

    【讨论】:

      【解决方案3】:

      字符串 == "金"

      你在某处有字符串变量定义吗?

      【讨论】: