我之前没有在Objective C中遇到过这种语法

时间:2013-09-02 18:51:53

标签: objective-c uiview uiviewcontroller

这是一本关于iphone游戏开发的书。

[((GameState*)viewController.view) Update]; 
“viewController”是UIViewcontroller的一个实例,“GameState”是UIView的子类,“Update”是“GameState”的一个方法。你能告诉我发生了什么吗?这种语法是否允许viewController使用GameState的方法?如果这是一个愚蠢的问题,我道歉。

3 个答案:

答案 0 :(得分:3)

所有这一切都在告诉编译器“嘿,viewController.view实际上是GameState *类型”。它实际上并没有任何东西,只是让编译器知道所以它不会警告它。

请注意,像这样欺骗编译器是完全合法的,它会相信你,而不是检查你的工作,所以如果可以的话,最好避免投射。如果你把它投射到它没有的东西上,如果你试图使用它没有的方法它会崩溃。

答案 1 :(得分:1)

这里发生了什么是C型演员:你告诉编译器你知道你的viewController的{​​{1}}类型为view,并且你知道它是可以在这里调用GameState的方法,即使这些方法不是GameState接口的一部分。

答案 2 :(得分:1)

意味着viewController的视图被转换为GameState(UIView的子类),这样编译器就不会抱怨调用了Update方法。

这有可能产生运行时错误,所以为了安全起见,我将把前一个语句括在:

if ([viewController.view isKindOfClass:[GameState class]])