【问题标题】:Why doesn't NSString support objectAtIndexedSubscript and how to work around?为什么 NSString 不支持 objectAtIndexedSubscript 以及如何解决?
【发布时间】:2013-07-23 03:32:28
【问题描述】:

我希望能够写出这样的东西:

NSString *foo = ...;
unichar c = foo[i];

但奇怪的是,NSString 不支持通过objectAtIndexedSubscript 进行数组索引。为什么不呢?

要解决这个问题,实现一个类别(例如,NSString+Indexing)来扩展NSString 是否明智?

【问题讨论】:

  • 但 unichar 不是对象。
  • 你看过 NSString 类参考吗?你对unichar c = [string characterAtIndex]说什么?

标签: objective-c nsstring


【解决方案1】:

使用方法在 NSString 上添加类别:

-(id)objectAtIndexedSubscript:(NSUInteger)idx
{
    if(idx >= self.length)
    {
        return nil;
    }

    return @([self characterAtIndex:idx]);
}

然后这样称呼它:

unichar c = [foo[i] unsignedShortValue]

请注意,当字符为空字符或索引超出范围时,c 将为 0。

【讨论】:

  • 但这是一个明智的解决方案吗? (OP的问题)
  • 这不是 OP 所要求的
  • Ohhhhhhhhh... Duh... 愚蠢的我,为什么我没有意识到这一点?... unichar 不是 Objective-C 对象;因此,objectAtIndexedSubscriptNSString 没有意义。这就是为什么它不支持它......而且不能。
  • 我认为这是一个很好的解决方案。在许多情况下,获取 NSNumber 对象比获取 unichar 对象更有用。像这样使用它: NSNumber *charNumber = myArray[i];然后您可以比较 charNumber 对象或将其存储在数组或字典中。仅在真正需要时获取 unichar。
猜你喜欢
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2020-01-20
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多