我正在学习iOS开发。在setter方法中,我不知道语法及其功能。
-(void)setURL:(NSURL *)URL
{
_URL = URL;
if(_URL) {
NSURLRequest *req = NSURLRequest requestWithURL:_URL];
[(UIWebView *)self.view loadRequest:req];
}
}我不明白的是这句话:
[(UIWebView *)self.view loadRequest:req];这是我第一次遇到这种情况:将self表示为指向UIWebView实例的指针?还是指示self.view作为指向UIWebView实例的指针?如果是后者,那就很有道理了。在我的应用程序中,self是UIViewController的一个实例,它的视图属性是一个UIWebView。但是,添加它有什么意义呢?为什么不直接使用self.view呢?谢谢你的帮助
发布于 2016-06-18 10:26:16
它是手动告诉编译器self.view是UIWebView *类型的-这就是所谓的类型转换。UIViewController的view属性被定义为UIView *。这个类没有任何方法loadRequest:,所以如果您尝试调用它而不将对象转换为UIWebView *,则编译器将警告您似乎在做不正确的事情。
发布于 2016-06-18 09:58:07
当您看到一个表达式执行几个没有显式顺序的操作时,最好检查一下运算符优先表。
(UIWebView *)self.view组件有两个操作--点.运算符和类型转换。根据该表,点运算符具有最高的优先级,因此首先对self.view进行评估。类型强制转换的优先级较低,因此在进行调用之前,self.view的结果被转换为(UIWebView*)。
https://stackoverflow.com/questions/37895628
复制相似问题