Есть ли способ приведения объектов в объекте-c так же, как при приведении объектов в VB.NET?
Например, я пытаюсь сделать следующее:
// 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];
Однако я получаю ошибку компилятора, поскольку свойство «список» существует в классе SelectionListViewController, но не в FieldEditViewController, хотя SelectionListViewController наследуется от FieldEditViewController.
В этом есть смысл, но есть ли способ привести myEditController к SelectionListViewController, чтобы я мог получить доступ к свойству list?
Например, в VB.NET я бы сделал:
CType(myEditController, SelectionListViewController).list = listOfItems
Спасибо за помощь!
objective-c
Билли
источник
источник
Еще примеры:
источник
Приведение типов в Objective-C очень просто:
Однако что произойдет, если первого объекта нет
UIView
и вы попытаетесь его использовать:Он рухнет. И найти такой сбой для этого случая легко, но что, если эти строки находятся в разных классах, а третья строка выполняется только один раз из 100 случаев. Бьюсь об заклад, это сбой обнаруживают ваши клиенты, а не вы! Правдоподобным решением является ранний сбой , например:
Эти утверждения выглядят не очень красиво, поэтому мы могли бы улучшить их с помощью этой удобной категории:
Это намного лучше:
PS Для безопасности типов коллекций у Xcode 7 есть намного лучше, чем приведение типов - generics
источник
Конечно, синтаксис точно такой же, как у C -
NewObj* pNew = (NewObj*)oldObj;
В этой ситуации вы можете рассмотреть возможность предоставления этого списка в качестве параметра конструктору, например:
Тогда используйте это так:
источник
Приведение для включения так же важно, как и приведение для исключения для программиста на C ++. Приведение типов отличается от RTTI в том смысле, что вы можете привести объект к любому типу, и результирующий указатель не будет нулевым.
источник