我一直在通过在Objective C中创建一个简单的应用程序来从零开始教自己编程。今天,我面临着一个问题,即我不得不编写一种方法,该方法不知道将要获得哪种类型的对象。在Google的帮助下,我很高兴发现一种叫做“广播”的东西。 :)

我正在像这样使用cast:

- (void)aCustomViewControllerNeedsToChangeStuff:(id)viewController
{
    ((SpecialViewController *)viewController).aProperty = somethingInteresting;
    ((SpecialViewController *)viewController).anotherProperty = somethingElse;
    ((SpecialViewController *)viewController).yetAnotherProperty = moreStuff;
}


我是否必须像这样在每一行上强制转换,或者是否可以在方法范围内一次强制转换“ viewController”以使代码更整洁?

最佳答案

您可以将控制器转换为temp变量并使用它(还添加了类型检查-以防万一):

- (void)aCustomViewControllerNeedsToChangeStuff:(id)viewController
{
    if ([viewController isKindOfClass:[SpecialViewController class]]){
        SpecialViewController *special = (SpecialViewController *)viewController;
        special.aProperty = somethingInteresting;
        special.anotherProperty = somethingElse;
        special.yetAnotherProperty = moreStuff;
    }
}

10-06 04:55