Вы путаете нотацию с чтением структуры.Это неудивительно, поскольку Apple сделала их неоднозначными.
indexPath.section
не означает «элемент структуры section
в indexPath
. Это даже не означает» свойство section
в indexPath
. "Это означает [indexPath section]
. Он просто вызывает метод section
и возвращает результат.
Точно так же foo.bar = baz
буквально не означает" установить свойство bar
в baz
. "Это буквально означает [foo setBar:baz]
. Что бы ни делал setBar:
, будет сделано. В большинстве случаев он устанавливает ивар.
Поскольку indexPath
также технически является структурным указателем, в некоторых случаях это возможно (ноне всегда и не часто, если вы правильно пишете код), чтобы сказать indexPath->section
. Вы никогда не должны этого делать. (Существуют некоторые чрезвычайно редкие исключения, но вы вряд ли столкнетесь с ними.)
Расстраивающая вещь овсе это то, что foo.bar
может быть структурной ссылкой или вызовом метода. Не зная, что такое foo
, вы не можете знать. Это одна из проблем с точечной нотацией.
Если вас смущает, не используйте точечные обозначения (ят продолжает оставаться противоречивой особенностью среди опытных разработчиков).Это никогда не требуется.Это просто сокращение для более явных [foo bar]
и [foo setBar:baz]
.
*(BOOL *)result
означает "приведение result
от void*
до BOOL *
и разыменование его как BOOL
. Этоне имеет отношения к точечной записи.