Intereting Posts
Магазин приложений показывает большой размер файла после публикации Напишите текст в круге в комплекте Sprite (быстрый) Почему этот код останавливает выполнение программы? Обнаружение специального символьного крана в UITextView Подсветка: получить токен устройства Ошибка ввода-вывода SQLite на iOS 7.0 (с монотоном) Установите кадр UIActivityIndicatorView Могу ли я отключить инерционную прокрутку резиновой ленты в UIScrollView IOS – сохранение NSDictionary на диск «Неподдерживаемый URL» при получении фотографий из FBSDKGraphRequest Автомакет при прокрутке Отключение ActionSheet отклоняется на ipad, когда пользователь касается внешнего popover Как объявить определения с экспоненциальным Как проверить достаточное пространство на устройстве iPhone перед загрузкой аудиофайлов с сервера IOS: стратегия воспроизведения полноэкранного видео с правильным соотношением сторон как на iPhone, так и на iPad

Как преобразовать эту точечную нотацию в вложенные скобки Objective-C?

Я стараюсь избегать точечной нотации любой ценой, но я изучаю книгу, которая использует ее почти явно, поэтому я преобразовал ее, когда вижу ее в тексте. Однако обозначение с несколькими точками, связанными вместе, все еще меня смущает.

Может ли кто-то разгадать эти два в обычных скобках и объяснить, как это работает, чтобы в будущем я мог преобразовать его самостоятельно?

self.tableView.tableHeaderView = searchBar; 

а также

 self.searchBar.autocorrectionType = UITextAutocorrectionTypeYes; 

первый из них:

 [[self tableView] setTableHeaderView: searchBar]; 

также нет ничего плохого в использовании:

 [self.tableView setTableHeaderView: searchBar]; 

и второй:

 [[self searchBar] setAutoCorrectionType: UITextAutocorrectionTypeYes]; 

здесь вы также можете использовать:

 [self.searchBar setAutoCorrectionType: UITextAutocorrectionTypeYes]; 

Вы можете использовать как getter, так и setter свойства с точечной нотацией. Итак, как заменить нотацию, зависит от того, действительно ли вы используете getter (чтобы получить значение свойства) или setter (чтобы установить значение свойства).

Геттер используется следующим образом: value = [object myProperty];

[object setMyProperty:value]; используется следующим образом: [object setMyProperty:value];

В линии:

 self.tableView.tableHeaderView = searchBar; 

мы используем setter для изменения значения tableHeaderView в объекте self.tableView , поэтому его можно заменить на:

 [self.tableView setTableHeaderView:searchBar]; 

Который может быть заменен на: (на этот раз мы используем геттер)

 [[self tableView] setTableHeaderView:searchBar]; 

По тем же соображениям вы можете написать:

 [self.searchBar setAutocorrectionType:UITextAutocorrectionTypeYes]; 

Или:

 [[self searchBar] setAutocorrectionType:UITextAutocorrectionTypeYes]; 

Почему вы хотите «избегать точечной нотации любой ценой»?

Я не говорю, что вы должны использовать точечную нотацию, я просто говорю, что у вас должна быть веская причина.

В то время как мы по теме, использование точечной нотации для всего явно злоупотребляет (и если книга использует его везде, это технически возможно, я бы сказал, что это может быть не очень хорошая книга), но это ИМХО приятно для геттеров и сеттеров , Это хорошо, потому что ваш код уже информирует читателя о том, какой метод называется вызываемым методом.

(поэтому я бы сказал, что AutomaticBobRoss.paintAnImage является неправильным использованием, потому что вы вызываете метод, целью которого является выполнение операции – должен быть [AutomaticBobRoss paintAnImage] – но AutomaticBobRoss.lastImage – это хорошее использование точечной нотации)