Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Subscripting only on OS X not iOS.


You can use them on iOS 5.1 by implementing the methods the subscripts map to on NSArray and NSDictionary (as well as mutable) in categories.

For NSArray:

    - (id)objectAtIndexedSubscript:(NSUInteger)index {
        return [self objectAtIndex:index];
    }
NSMutableArray:

    - (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index {
        if (index < self.count){
            if (object)
                [self replaceObjectAtIndex:index withObject:object];
            else
                [self removeObjectAtIndex:index];
        } else {
            [self addObject:object];
        }
    }
NSDictionary:

    - (id)objectForKeyedSubscript:(id)key {
        return [self objectForKey:key];
    }
NSMutableDictionary:

    - (void)setObject:(id)object forKeyedSubscript:(id)key {
        [self setObject:object forKey:key];
    }


The implementation already exists in iOS 5, you just need to make the compiler happy; a header that declares them is sufficient.


Is it just as easy as creating categories that add these methods?


The functionality is present for iOS, it just isn't being exposed. If you create a category header file (just header, not implementation) the compiler'll pick up on it and all will work fine.

This isn't my code, but I've been happily using it for a week or so now: https://gist.github.com/3299750


Apparently OSX 10.8 and iOS 6 bring support for subscripting to native NSArray/NSDictionary, but I think you can add subscripts to your own classes already just by implementing the following methods:

  -(id)objectAtIndexedSubscript:(NSUInteger)index;
  -(void)setObject:(id)object atIndexedSubscript:(NSUInteger)index;
as weiran has shown for NS(Mutable)Array/NS(Mutable)Dictionary.


That functionality is coming with Xcode 4.5




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: