【发布时间】:2014-04-22 18:42:27
【问题描述】:
在使用 Objective-C++ 时,我经常发现自己使用 initWithCString 将 std::string 转换为 NSString。为了简化流程,我在 NSString 上创建了一个类别,如下所示:
@implementation NSString (NSStringFromCPP)
+(NSString*)stringFromCppString:(std::string)cppString
{
return [[NSString alloc] initWithCString:cppString.c_str() encoding:NSStringEncodingConversionAllowLossy];
}
-(std::string)cppString
{
return std::string([self cStringUsingEncoding:NSStringEncodingConversionAllowLossy]);
}
@end
这使得 NSString 和 std::string 在两个方向上的转换变得相当容易。不过,似乎必须有一种方法可以将 std::string 隐式转换为 NSString 。我知道在Objective-C中没有构造函数之类的东西,那么如何在不必使用stringFromCppString
-(void)something:(NSString*)someString
{
NSLog(@"%@", someString);
}
-(void)activity
{
std::string activityName = "Calculator";
[self something:[NSString stringFromCppString:activityName]];
}
在大多数情况下,使用 std::string 的代码可以与使用 NSString 的代码分开。但是,会发生大量的桥接,并且代码变得分散注意力,到处都是stringFromCppString。
【问题讨论】:
-
std::string s = ""; NSString *nsstr = @(s.c_str());
标签: c++ ios objective-c nsstring objective-c++