有一个NSString
方法-characterAtIndex:
,它返回一个unichar。
- (单字符)characterAtIndex:(NSUInteger)索引
我想知道这个unichar(显然不是NSString
)是否可以转换为NSString
或费用NSString
用于比较目的?
并且:NSString
内部是否只包含一系列unichar项目?
答案 0 :(得分:67)
您有两个选择:第一个是向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
然后用
调用它NSString *otherString = @"TestString";
NSString *str = [NSString stringWithUnichar:[otherString characterAtIndex:1]];
或者你可以直接这样:
NSString *str = [NSString stringWithFormat:@"%C",[otherString characterAtIndex:1]];
如果要重复使用它,请选择类别,或者如果您只需要执行一次,请使用stringWithFormat示例!!
不确定NSString的内部,但我猜它可能包裹了
unichar *
或一组unichars(如C char *)
unichar只是一个用于存储角色的16位值。与仅为8位的无符号字符不同,它可以容纳超过0-255,因此它也可以保存unicode字符,即16位。 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/
希望有所帮助!
答案 1 :(得分:4)
另一种选择是使用类方法:
+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length;
所以只需使用:
yourString = [NSString stringWithCharacters: &yourChar length: 1];
yourChar参数必须是指针。
答案 2 :(得分:3)
NSString实际上是一个类集群。这意味着出于各种原因,包括基于内容和大小的性能,以及在创建NSString时支持免费桥接到CFString,您实际上可能会获得许多私有类中的一个,它们向isKindOf返回YES:当您询问它是否为NSString时它将响应NSString类中的所有方法。它就像一个协议,但所有对象都会在公共API中说和做,并且是NSString。
正如NSString和CFString的文档所述,它在概念上是一个UTF16 unichar数组 它可能并将使用不同的内部表示,它为实现提供了优势。通常表现有时内存大小。但是你可以依靠它在被问到或者API承诺的任何其他东西时给你一个unichar的C数组。
它已经很长时间才能成熟,几乎每个版本都在内部进行调整。
简而言之,您可以将其视为由UTF16 unichar数组支持,该数组主要与Unicode标准中的逻辑字符串描述相匹配。但要记住的是,你真的不应该担心里面的东西,只有它告诉你的是什么。
它是Unicode的最佳实现之一。 如果你想更全面地了解它是如何工作的,你可以在opensource.apple.com上查看(大多数)CFString的来源。 它是C和核心基础(面向对象的C)并且相当风格化,所以不要期望同时理解它。
NSString和CFString确实有从unichar返回和创建的方法。大多数人不应该在大多数时间都需要这些。 如果你这样做,要小心,准备好阅读并做出天真的错误。 Unicode是一个很大的话题。正确处理它是该级别的科学和艺术。这是NSString的原因之一。它处理了很多困难的东西,所以除非你想要或需要,否则你不必经常这么做。