我正在使用NSUUID
作为我的应用中的唯一ID,例如:
[[NSUUID UUID] UUIDString]
,就像预期的结果一样,我得到这样的ID:102A21AD-7216-4517-8A79-39776B767E72
由于后端原因,我需要UUID中的字母是小写的。我试图打电话
[[NSUUID UUID] UUIDString].lowercaseString
但是返回的字符串为空。
我是否真的必须迭代字符串中的所有字符并将适当的字符转换为小写?如果是这样,有人有任何最有效方法的建议吗?
编辑:
我试图实现此目的的方式是通过对NSUUID进行了分类,然后覆盖
-(NSString*) UUIDString;
方法。
我的实施是
-(NSString*) UUIDString{
return [super UUIDString].lowercaseString;
}
接受的答案解释了为什么这不起作用。
基于您对问题的编辑,请进行一些调查...
看起来NSUUID
的行为就像是A 类群集,并且您不能在没有实现其关键方法并自己提供UUID生成的功能的情况下将其子类别分类。如果您做子类,则将获得一个父类,其UUIDString
是空字符串。虽然该类的标准init
使您可以将UUIDString
更有用的__NSConcreteUUID
实例!
如果以上使以下部分实现感到困惑,则显示了一种方法:
@interface LowerUUID : NSUUID
@end
@implementation LowerUUID
{
NSUUID *real;
}
- (id) init
{
self = [super init];
if (self)
real = NSUUID.new;
return self;
}
- (NSString *) UUIDString
{
NSString *original = [real UUIDString];
NSString *lower = original.lowercaseString;
return lower;
}
@end
要完成,您还需要提供其他方法的实现。
对于此特定类别,您不太可能会发现这值得,但是对于像NSMutableArray
这样的类群集确实有意义。
您可以向Apple提交错误报告,说明该文档不说您不能在副级NSUUID
。
这对我有用:
NSString *lower = [[[NSUUID UUID] UUIDString] lowercaseString];
我尝试过,它有效:
NSString *str = [[NSUUID UUID] UUIDString];
NSLog(@"1: %@", str);
NSLog(@"2: %@", str.lowercaseString);