Struktur Objective-C
Larik Objective-C memungkinkan Anda untuk mendefinisikan tipe variabel yang dapat menampung beberapa item data dari jenis yang sama tetapi structure adalah tipe data lain yang ditentukan pengguna yang tersedia dalam pemrograman Objective-C yang memungkinkan Anda menggabungkan item data dari berbagai jenis.
Struktur digunakan untuk merepresentasikan catatan, Misalkan Anda ingin melacak buku Anda di perpustakaan. Anda mungkin ingin melacak atribut berikut tentang setiap buku -
- Title
- Author
- Subject
- ID Buku
Mendefinisikan Struktur
Untuk menentukan struktur, Anda harus menggunakan structpernyataan. Pernyataan struct mendefinisikan tipe data baru, dengan lebih dari satu anggota untuk program Anda. Format pernyataan struct ditunjukkan di bawah ini -
struct [structure tag] {
member definition;
member definition;
...
member definition;
} [one or more structure variables];
Itu structure tagbersifat opsional dan setiap definisi anggota adalah definisi variabel normal, seperti int i; atau float f; atau definisi variabel valid lainnya. Di akhir definisi struktur, sebelum titik koma terakhir, Anda dapat menentukan satu atau beberapa variabel struktur tetapi ini opsional. Inilah cara Anda mendeklarasikan struktur Buku -
struct Books {
NSString *title;
NSString *author;
NSString *subject;
int book_id;
} book;
Mengakses Anggota Struktur
Untuk mengakses anggota struktur mana pun, kami menggunakan member access operator (.). Operator akses anggota dikodekan sebagai periode antara nama variabel struktur dan anggota struktur yang ingin kita akses. Anda akan menggunakanstructkata kunci untuk mendefinisikan variabel jenis struktur. Berikut adalah contoh untuk menjelaskan penggunaan struktur -
#import <Foundation/Foundation.h>
struct Books {
NSString *title;
NSString *author;
NSString *subject;
int book_id;
};
int main() {
struct Books Book1; /* Declare Book1 of type Book */
struct Books Book2; /* Declare Book2 of type Book */
/* book 1 specification */
Book1.title = @"Objective-C Programming";
Book1.author = @"Nuha Ali";
Book1.subject = @"Objective-C Programming Tutorial";
Book1.book_id = 6495407;
/* book 2 specification */
Book2.title = @"Telecom Billing";
Book2.author = @"Zara Ali";
Book2.subject = @"Telecom Billing Tutorial";
Book2.book_id = 6495700;
/* print Book1 info */
NSLog(@"Book 1 title : %@\n", Book1.title);
NSLog(@"Book 1 author : %@\n", Book1.author);
NSLog(@"Book 1 subject : %@\n", Book1.subject);
NSLog(@"Book 1 book_id : %d\n", Book1.book_id);
/* print Book2 info */
NSLog(@"Book 2 title : %@\n", Book2.title);
NSLog(@"Book 2 author : %@\n", Book2.author);
NSLog(@"Book 2 subject : %@\n", Book2.subject);
NSLog(@"Book 2 book_id : %d\n", Book2.book_id);
return 0;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
2013-09-14 04:20:07.947 demo[20591] Book 1 title : Objective-C Programming
2013-09-14 04:20:07.947 demo[20591] Book 1 author : Nuha Ali
2013-09-14 04:20:07.947 demo[20591] Book 1 subject : Objective-C Programming Tutorial
2013-09-14 04:20:07.947 demo[20591] Book 1 book_id : 6495407
2013-09-14 04:20:07.947 demo[20591] Book 2 title : Telecom Billing
2013-09-14 04:20:07.947 demo[20591] Book 2 author : Zara Ali
2013-09-14 04:20:07.947 demo[20591] Book 2 subject : Telecom Billing Tutorial
2013-09-14 04:20:07.947 demo[20591] Book 2 book_id : 6495700
Struktur sebagai Argumen Fungsi
Anda dapat mengirimkan struktur sebagai argumen fungsi dengan cara yang sangat mirip seperti Anda meneruskan variabel atau penunjuk lainnya. Anda akan mengakses variabel struktur dengan cara yang sama seperti yang Anda akses pada contoh di atas -
#import <Foundation/Foundation.h>
struct Books {
NSString *title;
NSString *author;
NSString *subject;
int book_id;
};
@interface SampleClass:NSObject
/* function declaration */
- (void) printBook:( struct Books) book ;
@end
@implementation SampleClass
- (void) printBook:( struct Books) book {
NSLog(@"Book title : %@\n", book.title);
NSLog(@"Book author : %@\n", book.author);
NSLog(@"Book subject : %@\n", book.subject);
NSLog(@"Book book_id : %d\n", book.book_id);
}
@end
int main() {
struct Books Book1; /* Declare Book1 of type Book */
struct Books Book2; /* Declare Book2 of type Book */
/* book 1 specification */
Book1.title = @"Objective-C Programming";
Book1.author = @"Nuha Ali";
Book1.subject = @"Objective-C Programming Tutorial";
Book1.book_id = 6495407;
/* book 2 specification */
Book2.title = @"Telecom Billing";
Book2.author = @"Zara Ali";
Book2.subject = @"Telecom Billing Tutorial";
Book2.book_id = 6495700;
SampleClass *sampleClass = [[SampleClass alloc]init];
/* print Book1 info */
[sampleClass printBook: Book1];
/* Print Book2 info */
[sampleClass printBook: Book2];
return 0;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
2013-09-14 04:34:45.725 demo[8060] Book title : Objective-C Programming
2013-09-14 04:34:45.725 demo[8060] Book author : Nuha Ali
2013-09-14 04:34:45.725 demo[8060] Book subject : Objective-C Programming Tutorial
2013-09-14 04:34:45.725 demo[8060] Book book_id : 6495407
2013-09-14 04:34:45.725 demo[8060] Book title : Telecom Billing
2013-09-14 04:34:45.725 demo[8060] Book author : Zara Ali
2013-09-14 04:34:45.725 demo[8060] Book subject : Telecom Billing Tutorial
2013-09-14 04:34:45.725 demo[8060] Book book_id : 6495700
Petunjuk ke Struktur
Anda dapat mendefinisikan pointer ke struktur dengan cara yang sangat mirip seperti Anda mendefinisikan pointer ke variabel lain sebagai berikut -
struct Books *struct_pointer;
Sekarang, Anda dapat menyimpan alamat variabel struktur di variabel penunjuk yang ditentukan di atas. Untuk menemukan alamat variabel struktur, letakkan operator & sebelum nama struktur sebagai berikut -
struct_pointer = &Book1;
Untuk mengakses anggota struktur menggunakan penunjuk ke struktur itu, Anda harus menggunakan operator -> sebagai berikut -
struct_pointer->title;
Mari kita tulis ulang contoh di atas menggunakan pointer struktur, semoga ini memudahkan Anda untuk memahami konsepnya -
#import <Foundation/Foundation.h>
struct Books {
NSString *title;
NSString *author;
NSString *subject;
int book_id;
};
@interface SampleClass:NSObject
/* function declaration */
- (void) printBook:( struct Books *) book ;
@end
@implementation SampleClass
- (void) printBook:( struct Books *) book {
NSLog(@"Book title : %@\n", book->title);
NSLog(@"Book author : %@\n", book->author);
NSLog(@"Book subject : %@\n", book->subject);
NSLog(@"Book book_id : %d\n", book->book_id);
}
@end
int main() {
struct Books Book1; /* Declare Book1 of type Book */
struct Books Book2; /* Declare Book2 of type Book */
/* book 1 specification */
Book1.title = @"Objective-C Programming";
Book1.author = @"Nuha Ali";
Book1.subject = @"Objective-C Programming Tutorial";
Book1.book_id = 6495407;
/* book 2 specification */
Book2.title = @"Telecom Billing";
Book2.author = @"Zara Ali";
Book2.subject = @"Telecom Billing Tutorial";
Book2.book_id = 6495700;
SampleClass *sampleClass = [[SampleClass alloc]init];
/* print Book1 info by passing address of Book1 */
[sampleClass printBook:&Book1];
/* print Book2 info by passing address of Book2 */
[sampleClass printBook:&Book2];
return 0;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
2013-09-14 04:38:13.942 demo[20745] Book title : Objective-C Programming
2013-09-14 04:38:13.942 demo[20745] Book author : Nuha Ali
2013-09-14 04:38:13.942 demo[20745] Book subject : Objective-C Programming Tutorial
2013-09-14 04:38:13.942 demo[20745] Book book_id : 6495407
2013-09-14 04:38:13.942 demo[20745] Book title : Telecom Billing
2013-09-14 04:38:13.942 demo[20745] Book author : Zara Ali
2013-09-14 04:38:13.942 demo[20745] Book subject : Telecom Billing Tutorial
2013-09-14 04:38:13.942 demo[20745] Book book_id : 6495700
Bit Fields
Bit Fields memungkinkan pengemasan data dalam suatu struktur. Ini sangat berguna ketika memori atau penyimpanan data berada di premium. Contoh umum -
Mengemas beberapa objek menjadi kata mesin. misal, flag 1 bit dapat dipadatkan.
Membaca format file eksternal - format file non-standar dapat dibaca. Misalnya 9 bit integer.
Objective-C memungkinkan kita melakukan ini dalam definisi struktur dengan meletakkan: panjang bit setelah variabel. Misalnya -
struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
unsigned int type:4;
unsigned int my_int:9;
} pack;
Di sini, pack_struct berisi 6 anggota: Empat flag 1 bit f1..f3, tipe 4 bit dan 9 bit my_int.
Objective-C secara otomatis mengemas bidang bit di atas sekadat mungkin, asalkan panjang maksimum bidang kurang dari atau sama dengan panjang kata integer komputer. Jika ini tidak terjadi, maka beberapa kompiler memungkinkan memori tumpang tindih untuk field sementara yang lain akan menyimpan field berikutnya di kata berikutnya.