Intereting Posts

Как преобразовать эту точечную нотацию в вложенные скобки 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 – это хорошее использование точечной нотации)