Apakah ada cara untuk mentransmisikan objek ke objektif-c seperti cara objek dilemparkan di VB.NET?
Misalnya, saya mencoba melakukan hal berikut:
// create the view controller for the selected item
FieldEditViewController *myEditController;
switch (selectedItemTypeID) {
case 3:
myEditController = [[SelectionListViewController alloc] init];
myEditController.list = listOfItems;
break;
case 4:
// set myEditController to a diff view controller
break;
}
// load the view
[self.navigationController pushViewController:myEditController animated:YES];
[myEditController release];
Namun saya mendapatkan kesalahan kompiler karena properti 'list' ada di kelas SelectionListViewController tetapi tidak di FieldEditViewController meskipun SelectionListViewController mewarisi dari FieldEditViewController.
Ini masuk akal, tetapi apakah ada cara untuk mentransmisikan myEditController ke SelectionListViewController sehingga saya bisa mengakses properti 'list'?
Misalnya di VB.NET saya akan melakukan:
CType(myEditController, SelectionListViewController).list = listOfItems
Terima kasih untuk bantuannya!
objective-c
Billy
sumber
sumber
Contoh lainnya:
sumber
Typecasting di Objective-C semudah:
Namun, apa yang terjadi jika objek pertama tidak
UIView
dan Anda mencoba menggunakannya:Ini akan crash. Dan mudah untuk menemukan crash seperti itu untuk kasus ini, tetapi bagaimana jika baris tersebut berada di kelas yang berbeda dan baris ketiga dijalankan hanya sekali dalam 100 kasus. Saya yakin pelanggan Anda menemukan kecelakaan ini, bukan Anda! Solusi yang masuk akal adalah crash lebih awal , seperti ini:
Penegasan tersebut tidak terlihat bagus, jadi kami dapat memperbaikinya dengan kategori praktis ini:
Ini jauh lebih baik:
PS Untuk jenis keamanan koleksi Xcode 7 memiliki jauh lebih baik daripada typecasting - generik
sumber
Tentu, sintaksnya persis sama dengan C -
NewObj* pNew = (NewObj*)oldObj;
Dalam situasi ini Anda mungkin ingin mempertimbangkan untuk menyediakan daftar ini sebagai parameter ke konstruktor, seperti:
Kemudian gunakan seperti ini:
sumber
Casting untuk dimasukkan sama pentingnya dengan casting untuk pengecualian untuk programmer C ++. Jenis pengecoran tidak sama dengan RTTI dalam arti bahwa Anda dapat mentransmisikan objek ke jenis apa pun dan penunjuk yang dihasilkan tidak akan nihil.
sumber