1

目前我正在开发一个软件,目前它是 100% 使用 iPhone 3.0 SDK 用 Objective-C 编写的。

我来到了一个十字路口,我需要做很多事情或字符串连接,更具体地说,是 NSString 连接,到目前为止,我一直在这样做:

Objective-C 字符串连接:

NSString *resultantString = (NSMutableString*)[@"Hello " stringByAppendingString: @"World"];

现在您可以想象,当我尝试将 6 个 NSString 连接在一起时,这将变得非常难以阅读。

起初我考虑在一个 Objective-C++ 类中混合来做我的字符串连接并将它交给我的 Objective-C 类,然后我可以使用 C++ 的简单字符串连接,例如:

C++ 字符串连接:

string cppString = "Hello" + "World" + "see" + "easy!";

我可以使用C字符数组,但这会更难阅读。

然后让我感到震惊的是,我可以在 Cocoa 中使用 Python 或 Ruby 桥接器(与基于 C 的语言相比,它们提供了正则表达式的额外好处和出色的字符串处理)。

即使我只编写了少量的 Ruby 和 Python,这对我来说也是有意义的,因为它们被称为字符串操作语言。Perl 我决定跳过,因为 Xcode 不直接支持它。

我也对性能感兴趣,所以我正在寻找最快的方法来进行字符串连接。

所以我该怎么做?我在 Objective-C 中是否缺少一些非常简单的方法来一次连接多个字符串,比如 10 个字符串?还是我的想法是使用 Python 或 Ruby 类方法返回连接或正则表达式修改的字符串,而不像听起来那么疯狂?也许我什至错过了另一种方法来做到这一点?

更新: 是的。似乎我很疯狂地考虑引入另一种语言运行时来进行字符串操作,特别是因为我注意到我关心速度。添加桥可能比简单地使用 NSString/NSMutableString 慢得多。

4

5 回答 5

9

对于固定大小的连接,您可以使用[NSString stringWithFormat:]如下:

NSString *str = [NSString stringWithFormat:@"%@ %@ %@",
                                  @"Hello", @"World", @"Yay!"];
于 2009-07-07T18:02:19.460 回答
9

您可以使用连接操作。

NSArray *chunks  = ... get an array, say by splitting it;
string = [chunks componentsJoinedByString: @" :-) "];

会产生类似 oop :-) ack :-) bork :-) greeble :-) ponies

于 2009-07-07T18:04:24.653 回答
4

你见过 NSMutableString 类的 appendString 方法吗?

如果您真正感兴趣的话,来自同一类的 appendFormat 将允许您使用一条语句进行许多连接。

于 2009-07-07T17:59:54.257 回答
3

我会避免混合语言,特别是如果您不太了解 Python 或 Ruby。你在 Objective-C 中的可读代码中获得了什么,你将不得不阅读多种语言来理解你自己的代码库。对我来说似乎是可维护性的噩梦。

我强烈建议采用如何直接在 Objective-C 中执行此操作的建议之一。

于 2009-07-07T18:06:33.727 回答
2

仅仅为此而拖入 C++ 似乎相当笨拙。stringWithFormat:正如其他人所建议的那样,在 NSString 上使用或appendFormat:与 NSMutableString 一起使用更加自然,并且不是特别难以阅读。此外,为了在 Cocoa 中使用字符串,您必须添加额外的代码来从 C++ 字符串来回转换。

于 2009-07-07T18:11:26.900 回答