我在应用程序中使用NSUUID作为唯一的I,如下所示:
[[NSUUID UUID] UUIDString]和预期的结果一样,我得到了一个类似的id:102A21AD-7216-4517-8A79-39776B767E72
出于后端的原因,我需要uuid中的字母是小写的。我试着打电话
[[NSUUID UUID] UUIDString].lowercaseString 但是返回的字符串是空的。
我真的需要迭代字符串中的所有字符并将适当的字符转换为小写吗?如果是的话,是否有人有任何关于最有效的方法来做到这一点的建议?
编辑:
我试图实现这一点的方式是子类NSUUID,然后重写
-(NSString*) UUIDString; 方法。
我的实现是
-(NSString*) UUIDString{
return [super UUIDString].lowercaseString;
}被接受的答案解释了为什么这不起作用。
发布于 2014-01-27 18:35:47
根据你对这个问题的编辑,有一点调查是应该的.
看起来,NSUUID的行为就像一个类集群,如果不实现它的关键方法并自己提供UUID生成的功能,就不能将它子类化。如果是子类,则会得到一个父类,其UUIDString是空字符串。虽然这个类的标准init提供给您一个__NSConcreteUUID的实例,但是它的UUIDString更有用!
如果上面的内容让人感到困惑,那么下面的部分实现展示了一种方法:
@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这样的类集群来说,这确实是有意义的。
你可以向苹果提交一份错误报告,声明文档没有说明你不能小打小闹地分类NSUUID。
发布于 2014-01-27 16:25:32
这对我来说很管用:
NSString *lower = [[[NSUUID UUID] UUIDString] lowercaseString];发布于 2014-01-27 16:26:18
我试过了,效果很好:
NSString *str = [[NSUUID UUID] UUIDString];
NSLog(@"1: %@", str);
NSLog(@"2: %@", str.lowercaseString);https://stackoverflow.com/questions/21385950
复制相似问题