3

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;
}

接受的答案解释了为什么这不起作用。

4

3 回答 3

3

根据您对问题的编辑,需要进行一些调查......

它看起来像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来说确实有意义。

您可以向 Apple 提交错误报告,说明文档没有说明您不能简单地 sub-class NSUUID

于 2014-01-27T18:35:47.523 回答
2

这对我有用:

NSString *lower = [[[NSUUID UUID] UUIDString] lowercaseString];
于 2014-01-27T16:25:32.410 回答
2

我试过了,它有效:

NSString *str = [[NSUUID UUID] UUIDString];
NSLog(@"1: %@", str);
NSLog(@"2: %@", str.lowercaseString);
于 2014-01-27T16:26:18.463 回答