基本 Objective C 语法

Basic Objective C grammar

我正在学习 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];

这是我第一次遇到 situation:indicate self 作为指向 UIWebView 实例的指针?或者将 self.view 指示为指向 UIWebView 实例的指针?如果是后者,那还挺有道理的。在我的应用程序中,self 是 UIViewController 的一个实例,它的视图 属性 是一个 UIWebView。但是添加它有什么意义呢?为什么不直接使用 self.view 呢?感谢帮助

当您看到一个表达式执行多个没有明确顺序的操作时,最好检查一下 operator precedence table

(UIWebView *)self.view 组件有两个操作 - 点 . 运算符和类型转换。根据 table,点运算符具有最高优先级,因此首先计算 self.view。类型转换具有较低的优先级,因此 self.view 的结果在进行调用之前被转换为 (UIWebView*)

它手动告诉编译器 self.viewUIWebView * 类型——这被称为类型转换。 UIViewControllerview 属性 定义为 UIView *。这个 class 没有任何方法 loadRequest:,所以如果你尝试调用它而不将对象转换为 UIWebView *,那么编译器会警告你你似乎在做一些不正确的事情.