Хорошо, поэтому ответ состоял в том, чтобы добавить это к методу session.dataTask (в закрытии else).
let jsonObject = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
let query = jsonObject["token"] as! String
print(query)
Для получения обратной копии массива посмотрите решение danielpunkas с помощью reverseObjectEnumerator
.
Для инвертирования изменяемого массива, можно добавить следующую категорию к коду:
@implementation NSMutableArray (Reverse)
- (void)reverse {
if ([self count] <= 1)
return;
NSUInteger i = 0;
NSUInteger j = [self count] - 1;
while (i < j) {
[self exchangeObjectAtIndex:i
withObjectAtIndex:j];
i++;
j--;
}
}
@end
Я не знаю ни о ком созданном в методе. Но, кодирование вручную не является слишком трудным. Принятие элементов массива, с которым Вы имеете дело, является объектами NSNumber целого типа, и 'прибытием' является NSMutableArray, который Вы хотите инвертировать.
int n = [arr count];
for (int i=0; i<n/2; ++i) {
id c = [[arr objectAtIndex:i] retain];
[arr replaceObjectAtIndex:i withObject:[arr objectAtIndex:n-i-1]];
[arr replaceObjectAtIndex:n-i-1 withObject:c];
}
, Так как Вы запускаете с NSArray тогда, необходимо создать изменяемый массив сначала с содержанием исходного NSArray ('origArray').
NSMutableArray * arr = [[NSMutableArray alloc] init];
[arr setArray:origArray];
Редактирование: Зафиксированные n-> n/2 в цикле рассчитывают и измененный NSNumber к более универсальному идентификатору из-за предложений в ответе Brent.
DasBoot имеет правильный подход, но в его коде существует несколько ошибок. Вот отрывок абсолютно общего кода, который инвертирует любой NSMutableArray на месте:
/* Algorithm: swap the object N elements from the top with the object N
* elements from the bottom. Integer division will wrap down, leaving
* the middle element untouched if count is odd.
*/
for(int i = 0; i < [array count] / 2; i++) {
int j = [array count] - i - 1;
[array exchangeObjectAtIndex:i withObjectAtIndex:j];
}
можно обернуть это в функцию C, или для бонусных очков, использовать категории, чтобы добавить его к NSMutableArray. (В этом случае 'массив' стал бы 'сам'.) Можно также оптимизировать его путем присвоения [array count]
к переменной перед циклом и использования той переменной, если Вы требуете.
, Если у Вас только есть регулярный NSArray, нет никакого способа инвертировать его на месте, потому что NSArrays не может быть изменен. Но можно сделать обратную копию:
NSMutableArray * copy = [NSMutableArray arrayWithCapacity:[array count]];
for(int i = 0; i < [array count]; i++) {
[copy addObject:[array objectAtIndex:[array count] - i - 1]];
}
Или использование этот небольшой прием, чтобы сделать это в одной строке:
NSArray * copy = [[array reverseObjectEnumerator] allObjects];
, Если Вы просто хотите циклично выполниться по массиву назад, можно использовать for
/ in
цикл с [array reverseObjectEnumerator]
, но, вероятно, немного более эффективно использовать -enumerateObjectsWithOptions:usingBlock:
:
[array enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// This is your loop body. Use the object in obj here.
// If you need the index, it's in idx.
// (This is the best feature of this method, IMHO.)
// Instead of using 'continue', use 'return'.
// Instead of using 'break', set '*stop = YES' and then 'return'.
// Making the surrounding method/block return is tricky and probably
// requires a '__block' variable.
// (This is the worst feature of this method, IMHO.)
}];
( Примечание : Существенно обновленный в 2014 с еще пятью годами опыта Основы, новой функции Objective-C или два, и пара подсказок из комментариев.)
Существует намного более легкое решение при использовании в своих интересах встроенного reverseObjectEnumerator
метод на NSArray
, и allObjects
метод NSEnumerator
:
NSArray* reversedArray = [[startArray reverseObjectEnumerator] allObjects];
allObjects
документируется как возврат массива с объектами, которые еще не были пересечены с nextObject
в порядке:
Этот массив содержит все остающиеся объекты перечислителя в перечислимом порядке .