- (IBAction)button:(id)sender{
NSString *hi = @"hi";
_label.text = NSLog(@"I like to say %@", hi);
}
我还试图做一些更复杂的事情并使用像这样的void语句 这会有用吗,如果不是它的错误
- (void)num{
int num = 42;
}
- (IBAction)button:(id)sender{
_label.text = NSLog(@"I like to say %i", num);
}
答案 0 :(得分:2)
为什么要尝试使用NSLog
?这是为了在日志中显示消息。
您想要NSString stringWithFormat:
。
_label.text = [NSString stringWithFormat:@"I like to say %@", hi);
由于NSLog
函数未返回NSString
值,因此您甚至无法编译。
答案 1 :(得分:2)
NSLog
是一个void
返回类型的函数,这意味着它不会返回任何值,因此您无法使用它来分配属性的值。它仅用于将消息打印到调试控制台或设备日志。您可能正在寻找的是stringWithFormat:
_label.text = [NSString stringWithFormat:@"I like to say %@", hi];
这是NSString
类的方法。它构造类似于NSLog的字符串,但它实际上返回一个可以分配给属性的新NSString值,依此类推。
Read its documentation here。您将一直使用此方法和其他NSString方法。
关于您的其他代码:
如果你想构建一个名为num
的方法,它产生一个你可以在别处使用的值,你需要声明它返回的值的类型,而不是使用void
:
- (int)num{
return 42;
}
现在num
是一个正确的实例方法。您需要调整代码才能正确访问此方法:
- (IBAction)button:(id)sender{
_label.text = [NSString stringWithFormat:@"I like to say %i", [self num]];
}
您将发送消息 num
发送到self
。松散地说,关键字self
是对当前对象实例的引用。因此[self num]
将调用您定义的num
方法,并返回其值。您可能需要阅读Programming with Objective-C以了解有关这些概念的更多信息。