iOS. Приемы программирования. Вандад Нахавандипур

Читать онлайн.
Название iOS. Приемы программирования
Автор произведения Вандад Нахавандипур
Жанр Программирование
Серия Бестселлеры O’Reilly (Питер)
Издательство Программирование
Год выпуска 2014
isbn 978-5-496-01016-0



Скачать книгу

можно, вызвав его непосредственно из этого класса. Не волнуйтесь, если на первый взгляд это кажется сложным. В этой книге мы рассмотрим многочисленные примеры методов, пока просто следите за ходом рассказа.

      2. Тип данных для метода, если метод возвращает какое-либо значение. В примере мы указали тип данных void. Так мы сообщаем компилятору, что не собираемся возвращать от метода какое-либо значение.

      3. Первая часть имени метода, за которой идет первый параметр. Метод может и не иметь параметров. Методы, не принимающие параметров, довольно широко распространены.

      4. Список последующих параметров, идущих за первым.

      Рассмотрим пример метода с двумя параметрами:

      – (void) singSong:(NSData *)paramSongData loudly:(BOOL)paramLoudly{

      /* Параметры, к которым мы можем обратиться здесь, в этом методе, таковы:

      paramSongData (для доступа к информации о песне)

      paramLoudly сообщает нам, должны мы петь песню громко или нет

      */

      }

      Важно учитывать, что каждый параметр каждого метода обладает внешним и внутренним именем. Внешнее имя входит в состав метода, а внутреннее имя – это фактическое название (или псевдоним) параметра, которое может использоваться в пределах реализации метода. В предыдущем примере внешнее имя первого параметра – singSong, а внутреннее – paramSongData. Внешнее имя второго параметра – loudly, а внутреннее – paramLoudly. Имя метода и внешние имена его параметров вместе образуют сущность, которая называется селектором метода. В данном случае селектор упомянутого метода будет иметь вид singSong: loudly:. Как будет объяснено далее в этой книге, селектор является идентификатором каждого метода в среде времени исполнения. Никакие два метода в рамках одного и того же класса не могут иметь одинаковые селекторы.

      В нашем примере мы определили в файле реализации класса Person (Person.m) три метода:

       walkAtKilometersPerHour:;

      • runAt10KilometersPerHour;

      • singSong: loudly:.

      Если бы мы хотели использовать любой из этих методов из какой-нибудь сущности, находящейся вне класса, например из делегата приложения, то должны были бы предоставить эти методы в нашем файле интерфейса (Person.h):

      #import <Foundation/Foundation.h>

      @interface Person: NSObject

      @property (nonatomic, copy) NSString *firstName;

      @property (nonatomic, copy) NSString *lastName;

      – (void) walkAtKilometersPerHour:(CGFloat)paramSpeedKilometersPerHour;

      – (void) runAt10KilometersPerHour;

      /* Не предоставляем метод singSong: loudly: для доступа извне.

      Этот метод является внутренним для нашего класса. Зачем же нам открывать к нему доступ? */

      @end

      Имея такой файл интерфейса, программист может вызывать методы walkAtKilometersPerHour: и runAt10KilometersPerHour извне класса Person. А метод singSong: loudly: так вызывать нельзя, поскольку он не предоставлен в файле интерфейса. Итак, продолжим: попробуем вызвать все три этих метода из делегата нашего приложения и посмотрим, что получится:

      – (BOOL) application:(UIApplication *)application

      didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

      Person *person = [[Person alloc] init];

      [person walkAtKilometersPerHour:3.0f];

      [person runAt10KilometersPerHour];

      /* Если раскомментировать следующую строку кода, то компилятор выдаст

      вам ошибку и