2

请多多包涵,因为我对 iOS 和 Objective-C 的世界还很陌生。我已经阅读了 Apple 的 Obj-C 入门书,以及网络上提供的一些免费书籍。

在按下按钮时,我试图简单地获取标签的文本并将其与字符串连接起来。我的心态仍然非常依赖于 Android/Java,它可能多么简单,但我在这里遇到了麻烦。尽管如此,这是我的代码:

- (IBAction)myButton:(UIButton *)sender {
    self.myLabel.text = [self.myLabel.text stringByAppendingString:@"obj-c is hard =/"];

}

这似乎很标准,但我可以想象自己经常这样做,所以我想确保这是正确的,或者有什么其他方法可以做到这一点?

4

4 回答 4

2

是的,这是正确的方法。如果您想使用另一种方法,请使用此方法

self.myLabel.text = [NSString stringWithFormat:@"%@ obj-c is hard =/",self.myLabel.text];
于 2013-06-06T05:08:18.660 回答
0

这是加入字符串的标准方式。由于 ios 更新了语法以使其变得容易,例如 NSArray 和 NSDiornary delaration,但对于连接,它没有声明任何快捷方式。

看看这个

或者

您可以使用技巧来简化字符串的连接。将参数传递给宏并使用以下连接文字语法。

#define STRING(text) @""text""

@implementation SPTViewController

- (void)viewDidLoad
{
    NSString *joinedFromLiterals =STRING(@"Congratulations!, ") @"I " @"really " @"enjoy " @"carpenting!";
    NSLog(@"joined string %@",joinedFromLiterals);

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

输出是---------

加入字符串 恭喜!,我真的很喜欢木工!

于 2013-06-06T05:09:23.803 回答
0

是的,这是正确的,但有一个问题。如果您之前没有设置 self.myLabel.text 的值,则nil默认设置。然后调用任何方法(如[self.myLabel.text stringByAppendingString:@"obj-c is hard =/"])的结果也将为 nil,因此myLabel仍然会有空文本。Objective-C 处理nil值的方式与nullJava 不同。
所以为了安全起见,首先初始化标签的文本:

self.myLabel.text = @"";
于 2013-06-06T09:26:29.213 回答
0

你做得对。当然,Objective-C 比 C# 或 Java 甚至 Visual Basic .net 更冗长(因为我曾经在所有这些语言上工作过),但不要被那些长方法名所困扰。尽管有些#defines 可能非常有用,例如(重写为 C 内联函数):

static inline __attribute__((always_inline))
__attribute__((format(NSStirng, 1, 2)) NSString *SKSTR(NSString *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    NSString *string = [[NSString alloc] initWithFormat:fmt arguments:args];
    va_end(args);
#if !__has_feature(objc_arc)
    [string autorelease];
#endif
    return string;
}

希望__attribute__s 和#ifs 不会让您感到困惑 - 您可以放心地忽略它们。

要使用:

self.label.text = SKSTR(@"%@, ugh!", self.label.text); // just like NSLog or snprintf :)
于 2013-06-06T09:35:14.580 回答