unichar和NSString - 这些可以互换吗?

34 iphone cocoa-touch uikit

有一种NSString方法-characterAtIndex:可以返回一个unichar.

  • (单字符)characterAtIndex:(NSUInteger)指数

我想知道这个unichar,显然不是一个NSString,可以转换成一个NSString或者NSString用于比较目的吗?

并且:NSString内部是否只包含一系列unichar项目?

mic*_*moo 68

您有两个选择:第一个是向NSString添加stringWithUnichar方法的类别:

@interface NSString (MNNSStringWithUnichar)
+ (NSString *) stringWithUnichar: (unichar) value;
@end


@implementation NSString (MNNSStringWithUnichar)

+ (NSString *) stringWithUnichar:(unichar) value {
     NSString *str = [NSString stringWithFormat: @"%C", value];
     return str;
}

@end
Run Code Online (Sandbox Code Playgroud)

然后用它来调用它

NSString *otherString = @"TestString";

NSString *str = [NSString stringWithUnichar:[otherString characterAtIndex:1]];
Run Code Online (Sandbox Code Playgroud)

或者你可以直接这样:

NSString *str = [NSString stringWithFormat:@"%C",[otherString characterAtIndex:1]];
Run Code Online (Sandbox Code Playgroud)

如果要重复使用它,请选择类别,或者如果您只需要执行一次,请使用stringWithFormat示例!

不确定NSString的内部,但我猜它可能包装了一个

unichar *
Run Code Online (Sandbox Code Playgroud)

或一组unichars(如C char*)

unichar只是一个用于存储角色的16位值.与仅为8位的无符号字符不同,它可以容纳超过0-255,因此它也可以容纳16位的unicode字符.NSString是一个(集群)类[es],它包含一个unichars数组

编辑

以下是一些关于人们认为NSString是什么的文章:

http://cocoawithlove.com/2008/08/string-philosophies-char-arrays.html

http://www.reddit.com/r/programming/comments/6v1yw/string_philosophies_char_arrays_stdstring_and/

希望有所帮助!


Bji*_*nse 5

另一种选择是使用类方法:

+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length;
Run Code Online (Sandbox Code Playgroud)

所以只需使用:

yourString = [NSString stringWithCharacters: &yourChar length: 1];
Run Code Online (Sandbox Code Playgroud)

yourChar 参数必须是一个指针。