在Python中,我可以像这样轻松获得一个子阵列
>> v1 = ['a', 'b', 'c', 'd']
>> v2 = v1[1:]
>> v2
['b', 'c', 'd']
如何优雅地在Objective-C中完成等效工作?
起初我虽然这种方法可以胜任:
- (void)getObjects:(id[])aBuffer range:(NSRange)aRange
但它将对象复制到缓冲区位置。我需要将它们添加回NSArray
的另一个实例。另外,编译器抱怨保留/释放属性,我真的不习惯处理。
id* objs;
NSRange rng = NSMakeRange(1, [v1 count] - 1);
[v1 getObjects:objs range:rng]; # Sending '__strong id *'
# to parameter of type '__unsafe_unretained id *'
# changes retain/release properties of pointer
那么,还有更优雅的方式吗?或者除了迭代objectEnumerator
之外别无他法?
答案 0 :(得分:10)
NSArray* v1 = @[@"a",@"b",@"c",@"d"];
NSRange rng = NSMakeRange(1,[v1 count]-1);
NSArray* v2 = [v1 subarrayWithRange:rng];