我开始为iPhone开发。我有一个初学者类型的问题,我敢肯定:
我有这个,有效:
testLabel.text = [NSString stringWithFormat:@"%@ to %@", testLabel.text, newLabelText];
我希望我可以使用“+ =”运算符,但是我得到一个编译错误(无效的操作数到二进制+,有'struct NSString *'和'struct NSString *'):
testLabel.text += [NSString stringWithFormat:@"to %@", newLabelText];
为什么我不能这样做?
另外,如何缩短我的第一段代码呢?
答案 0 :(得分:5)
考虑使用NSMutableString - 您可以使用appendString:
方法,如:
NSMutableString *str = [@"hello" mutableCopy];
[str appendString:@" world!"];
答案 1 :(得分:5)
您不能使用+=
运算符,因为C和Objective-C不允许运算符重载。你试图使用+=
两种指针类型,这是不允许的 - 如果+=
表达式的左侧有一个指针类型,那么右侧必须是一个整数类型,结果是指针算术,在这种情况下不是你想要的。
答案 2 :(得分:2)
由于ObjectiveC不支持,因此无法完成,ObjectiveC是C上的一个小层。
testLabel.text = [testLabel.text stringByAppendingFormat:@" to %@", newLabelText];
答案 3 :(得分:1)
NSString不可变(它们无法更改),这就是你不能使用+ =的原因。
可以更改NSMutableString。你或许可以在这里使用它们。
您的代码已经很少了。 Objective-C是一种富有表现力的语言,因此只需习惯长,描述性的函数和变量名称。
答案 4 :(得分:0)
尝试一下:
// usage: label.text += "abc"
public func += (a:inout String?, b:String) {
a = (a ?? "") + b
}
尝试给该自定义运算符
:let label = UILabel()
label.text = "abc"
label.text += "_def"
print(label.text) // “abc_def”