这种类型的演员是什么意思?

时间:2012-06-27 06:46:18

标签: iphone objective-c uiview

SomeView.h

@interface SomeView : UIScrollView <UIScrollViewDelegate> 

- (void)setPage:(int)page;

@end

SomeViewController.h

@interface SomeViewController : UIViewController

@end

SomeViewController.m

#import "SomeView.h"
#import "SomeViewController.h"

- (void)viewDidLoad
{
    [super viewDidLoad];
    [(SomeView *)self.view setPage:1];
}

(SomeView *)self.view的含义是什么?

在实际代码中,似乎正在继承从SomeViewself.view的功能......

参考:原始source code

4 个答案:

答案 0 :(得分:1)

由于self.viewUIView,您需要将其投放到SomeView

所以,

SomeView *someView = self.view;会给你一个警告 所以你施展它

SomeView *someView = (SomeView *)self.view;

它不是魔术,它只是将UIView转换为SomeViewself.view定义为UIView 但它是SomeView类的一个实例,所以为了使用SomeView函数,你需要将它强制转换

答案 1 :(得分:1)

这实际上是从self.viewSomeView的类型转换,以访问SomeView的功能。

由于您的视图控制器已加载SomeView,但self.view将返回UIView的实例,因此需要对其进行类型转换以避免出现警告。

答案 2 :(得分:1)

首先,您的问题不适用于原始来源的上下文。

控制器的视图由IB在故事板中明确设置。这意味着self.view被设置为自定义SomeView类,但编译器不知道这一点!这就是它被铸造的原因。

所以它看起来像编译器的普通UIView,但实际上是SomeView需要访问它的方法(所以我们告诉编译器'不要担心这是一个SomeView,去吧并且像这样对待它')。我希望这是有道理的。

PS。您必须下载实际项目以查看实际情况,因为答案可以在故事板中找到

答案 3 :(得分:0)

[(SomeView *)self.view setPage:1];

这意味着你的self.view是SomeveView的类型

SomeView *someVw = [[SomeView alloc]init];
self.view = someVw;