Objective-C позволяет назначать для типа данных альтернативное имя. Для этого используется оператор typedef. В следующей строке определяется имя Counter(счетчик) как эквивалент типа данных Objective-C int.
1 |
typedef int Counter; |
Затем можно объявить переменные с типом Counter, как в следующей строке.
1 |
Counter j, n; |
Компилятор Objective-C будет интерпретировать это как объявление обычных целых переменных j и n. Определение j и n посредством typedef указывает назначение переменных в программе.
Объявление в традиционной форме с типом int оставило бы их назначение непонятным. Ниже с помощью typedef определяется тип с именем NumberObject для объектов типа Number.
1 |
typedef Number *NumberObject; |
Переменные, которые объявляются затем с типом NumberObject, как в строке:
1 |
NumberObject myValue1, myValue2, myResult; |
будут интерпретироваться так, как если бы они были объявлены обычным образом:
1 |
Number *myValue1, *myValue2, *myResult; |
Чтобы определить имя нового типа с помощью typedef, нужно выполнить следующую процедуру:
- Написать такое же объявление, как при объявлении переменной нужного типа.
- Там, где должно быть имя объявляемой переменной, поместить имя нового типа.
- Перед всем этим поставить слово typedef.
Для примера определим тип с именем Direction(Направление) как перечислимый тип данных со значениями east, west, north и south(восток, запад, юг и север), напишем определение этого перечислимого типа данных и подставим имя Direction там, где обычно ставится имя переменной. Перед всем этим нужно поместить ключевое слово typedef.
1 |
typedef enum { east, west, south, north } Direction; |
После этого можно объявлять переменные с типом Direction:
1 |
Direction step1, step2; |
Foundation framework содержит следующее определение typedef для NSComparisonResult в одном из заголовочных файлов.
1 2 3 4 |
enum _NSComparisonnResult { NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending }; typedef NSInteger NSComparisonResult; |
Некоторые методы в Foundation framework, которые выполняют сравнение(comparison), возвращают значение этого типа. Например, метод сравнения строк Foundation с именем compare: возвращает значение типа NSComparisonResult после сравнения двух строк, которые являются объектам NSString. Этот метод объявляется следующим образом:
1 |
-(NSComparisonResult) compare: (NSString *) string; |
Чтобы проверить равенство двух объектов NSString с именами userName и savedName, можно включить в программу следующую строку:
1 2 3 4 |
if([userName compare: savedName] == NSOrderedSame) { // Имена совпадают ... } |
На самом деле здесь проверяется, равен ли нулю результат метода compare:.