Objective-C型別定義(typedef)


Objective-C程式設計語言提供了一個名稱為typedef的關鍵字,可以使用此關鍵字為型別指定新名稱。 以下是為單位元組數位定義術語BYTE的範例 -

typedef unsigned char BYTE;

在此型別定義之後,識別符號BYTE可以用作unsigned char型別的縮寫(或別名),例如:

typedef unsigned char BYTE;
BYTE  b1, b2;

按照慣例,大寫字母用於這些定義,以提醒使用者型別名稱實際上是符號縮寫,但可以使用小寫,如下所示 -

typedef unsigned char byte;

也可以使用typedef為使用者定義的資料型別指定名稱。 例如,使用帶結構的typedef來定義新的資料型別,然後使用該資料型別直接定義結構變數,如下所示 -

#import <Foundation/Foundation.h>

typedef struct Books {
   NSString *title;
   NSString *author;
   NSString *subject;
   int book_id;
} Book;

int main() {
   Book book;
   book.title = @"Objective-C程式設計";
   book.author = @"Yiibai";
   book.subject = @"程式設計教學";
   book.book_id = 10010;

   NSLog( @"Book title : %@\n", book.title);
   NSLog( @"Book author : %@\n", book.author);
   NSLog( @"Book subject : %@\n", book.subject);
   NSLog( @"Book Id : %d\n", book.book_id);

   return 0;
}

執行上面範例程式碼,得到以下結果:

2018-11-15 09:16:30.201 main[189222] Book title : Objective-C程式設計
2018-11-15 09:16:30.203 main[189222] Book author : Yiibai
2018-11-15 09:16:30.203 main[189222] Book subject : 程式設計教學
2018-11-15 09:16:30.203 main[189222] Book Id : 10010

typedef 與 #define 區別

#define是一個Objective-C指令,它也用於定義類似於typedef的各種資料型別的別名,但有以下區別 -

  • typedef僅限於為型別提供符號名稱,而#define也可用於定義值的別名,比如可以將1定義為ONE等。
  • typedef解釋由編譯器執行,其中#define語句由前處理器處理。

以下是#define的最簡單用法 -

#import <Foundation/Foundation.h>

#define TRUE  1
#define FALSE 0

int main( ) {
   NSLog( @"Value of TRUE : %d\n", TRUE);
   NSLog( @"Value of FALSE : %d\n", FALSE);

   return 0;
}

執行上面範例程式碼,得到以下結果:

2018-11-15 09:19:32.915 main[68468] Value of TRUE : 1
2018-11-15 09:19:32.917 main[68468] Value of FALSE : 0