这是从标签获取文本并在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 更冗长(因为我曾经在所有这些语言上工作过),但不要被那些长方法名所困扰。虽然一些#define
s 可能非常有用,例如(重写为 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 和 #if
s 不会让您感到困惑 - 您可以放心地忽略它们。
使用方法:
self.label.text = SKSTR(@"%@, ugh!", self.label.text); // just like NSLog or snprintf :)
【讨论】:
以上是关于这是从标签获取文本并在iOS中与字符串连接的标准方法吗?的主要内容,如果未能解决你的问题,请参考以下文章
Cytoscape js在节点上单击时如何获取所有边缘(文本标签)
如何从 scikit-learn 中与 predict_proba 一起使用的 cross_val_predict 获取类标签