#objective-c
#objective-c
Вопрос:
что означает эта строка при использовании второго NSDictionay рядом с телом сообщения:
NSDictionary *item = (NSDictionary *) [self.content objectAtIndex:indexPath.row];
Ответ №1:
(NSDictionary *)
приведение типа. Это говорит компилятору предположить, что объект, возвращаемый objectAtIndex:
методом, относится к типу NSDictionary *
, даже если возвращаемый тип метода отличается.
Ответ №2:
self.content
является свойством типа NSArray
(я думаю!)
Эта строка возвращает вам объект (который должен быть NSDictionary
) по индексу indexPath.row
. (NSDictionary*)
приводит объект к NSDictionary
.
Комментарии:
1. возвращаемый объект является словарем, но почему он был приведен к словарю?
2. потому что компилятор не знает, какой тип хранится в массиве
3. строки являются предопределенными словарями, поэтому он знает, какой тип данных хранится в этом массиве!
4. Приведение совершенно не нужно. Оно будет преобразовано
id
вNSDictionary *
без приведения.
Ответ №3:
Это приведение, как в C.
В вашем случае «self.content», похоже, является NSArray. Итак, [self.content objectAtIndex:indexPath.row] был бы NSObject. За исключением того, что здесь, по какой-то причине, вы знаете, что это NSDictionary. Итак, вы явно приводите его, чтобы избежать предупреждения компилятора (которое сообщило бы вам «эй, вы присваиваете NSObject переменной NSDictionary)
Комментарии:
1.
objectAtIndex:
возвращаетid
тип, а неNSObject *
тип.2. О, действительно, вы правы. Однако это должен быть NSObject, поскольку объекты, добавленные в NSArray, сохраняются и освобождаются, и, следовательно, должны быть NSObjects.
3. Также следует отметить, что я не думаю, что присвоение идентификатора переменной заданного типа вызвало бы предупреждение.
4. Нет, это не должно быть NSObject , потому что если это NSObject, то вы не сможете объединять вызовы методов в цепочку, например,
[[array objectAtIndex:4] integerValue]
не будет работать, потому чтоintegerValue
это не методNSObject
, поэтому компилятор выдаст предупреждение.