首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUUID小写字符

NSUUID小写字符
EN

Stack Overflow用户
提问于 2014-01-27 16:20:37
回答 3查看 1.2K关注 0票数 2

我在应用程序中使用NSUUID作为唯一的I,如下所示:

代码语言:javascript
复制
[[NSUUID UUID] UUIDString]

和预期的结果一样,我得到了一个类似的id:102A21AD-7216-4517-8A79-39776B767E72

出于后端的原因,我需要uuid中的字母是小写的。我试着打电话

代码语言:javascript
复制
[[NSUUID UUID] UUIDString].lowercaseString 

但是返回的字符串是空的。

我真的需要迭代字符串中的所有字符并将适当的字符转换为小写吗?如果是的话,是否有人有任何关于最有效的方法来做到这一点的建议?

编辑:

我试图实现这一点的方式是子类NSUUID,然后重写

代码语言:javascript
复制
-(NSString*) UUIDString; 

方法。

我的实现是

代码语言:javascript
复制
-(NSString*) UUIDString{
    return [super UUIDString].lowercaseString;
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-27 18:35:47

根据你对这个问题的编辑,有一点调查是应该的.

看起来,NSUUID的行为就像一个类集群,如果不实现它的关键方法并自己提供UUID生成的功能,就不能将它子类化。如果是子类,则会得到一个父类,其UUIDString是空字符串。虽然这个类的标准init提供给您一个__NSConcreteUUID的实例,但是它的UUIDString更有用!

如果上面的内容让人感到困惑,那么下面的部分实现展示了一种方法:

代码语言:javascript
复制
@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

票数 2
EN

Stack Overflow用户

发布于 2014-01-27 16:25:32

这对我来说很管用:

代码语言:javascript
复制
NSString *lower = [[[NSUUID UUID] UUIDString] lowercaseString];
票数 2
EN

Stack Overflow用户

发布于 2014-01-27 16:26:18

我试过了,效果很好:

代码语言:javascript
复制
NSString *str = [[NSUUID UUID] UUIDString];
NSLog(@"1: %@", str);
NSLog(@"2: %@", str.lowercaseString);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21385950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档