В Objective-C мы можем называть методы с аргументами в middle .Поэтому, когда он пишет [myFraction setTo:100 over:200];
, over
может означать ... ну, все, что он хочет.Это часть имени метода, который он выбрал.В этом случае он, вероятно, пытался заставить метод звучать как английский.(«Установите эту дробь на 100 над 200. Мы читаем дроби как« числитель над знаменателем », часто в обычной речи.)
Некоторые методы, называемые« аксессорами »«Мы пишем очень часто: это методы вида - (int)variable
(называемые« getters ») и - (void)setVariable:(int)newValue
(называемые« setters »).Мои примеры здесь предположительно вернут или изменят, соответственно, переменную экземпляра с именем variable
.Вот как могут выглядеть реализации метода:
- (int)variable
{
return variable;
}
- (void)setVariable:(int)newValue
{
variable = newValue;
}
Обычно такие методы доступа есть почти для каждой переменной экземпляра, имеющейся в вашем классе.В какой-то момент кому-то надоело писать [myInstance setVariable:20];
и тому подобное, и он решил, что лучше бы он выглядел, как и многие другие языки, myInstance.variable = 20;
.
Поэтому в Objective-C 2.0 добавлена точечная нотация,который позволяет вам написать ...
myInstance.variable
, что в большинстве случаев точно соответствует [myInstance variable]
(и НЕ имеет прямого доступа к переменной экземпляра variable
!), и ...
особый случай myInstance.variable = 20;
, который в точности эквивалентен [myInstance setVariable:20];
.Опять же, обратите внимание, что это не дает доступа к variable
напрямую, оно отправляет сообщение myInstance
Поэтому, если бы мы написали какой-то другой код в setVariable
, он все равно был бы доступен, если бы мы использовали точечную нотацию.
Точечная нотация предназначена для использования с аксессорами. Вы также можетеТеоретически используйте его для любого метода, который возвращает значение и не принимает аргументов (например, myArray.count
).Использование его для всего остального (myInstance.doSomeAction
) - крайне плохой стиль.Не делай этого.Поэтому, как я уверен, вы уже можете догадаться, [myFraction setTo:100 over:200]
не имеет эквивалента точечной нотации, так как принимает 2 аргумента и не является аксессором.