这是从标签获取文本并在iOS中与字符串连接的标准方法吗?

Posted

技术标签:

【中文标题】这是从标签获取文本并在iOS中与字符串连接的标准方法吗?【英文标题】:Is this the standard way to get text from label and concatenate with string in iOS? 【发布时间】:2013-06-01 23:37:44 【问题描述】:

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

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

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


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

【问题讨论】:

【参考方案1】:

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

self.myLabel.text = [NSString stringWithFormat:@"%@ obj-c is hard =/",self.myLabel.text];

【讨论】:

stringWithFormat 将允许您传递多个参数?不像stringByAppendingString 对吗?【参考方案2】:

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

Have a look at this

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

#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.

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

恭喜你!我真的很喜欢木工!

【讨论】:

【参考方案3】:

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

self.myLabel.text = @"";

【讨论】:

【参考方案4】:

你做得对。当然,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 :)

【讨论】:

以上是关于这是从标签获取文本并在iOS中与字符串连接的标准方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

Cytoscape js在节点上单击时如何获取所有边缘(文本标签)

BigQuery 中的标准 SQL - 从多行获取连接文本

如何从 scikit-learn 中与 predict_proba 一起使用的 cross_val_predict 获取类标签

如何获取保存的字符串并在 swift 中使用另一个视图控制器? [复制]

c# 将从单个文本框中获取的多个值分配给标签

我用UEditor编辑文本保存后,当我在查看详细页面时,发现文本域里面的字符还带了html标签,这是怎么一回