繁体   English   中英

objective-c 语法问题

[英]objective-c syntax question

我来自 c++/c#/java 阵营,当我看到以下 objective-c 语法时感到困惑......

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
    (NSDictionary *)launchOptions { }

据我了解(返回类型)函数名:(参数类型)参数; 像下面这样

- (void)applicationWillResignActive:(UIApplication *)application { }

参数 (UIApplication *)application didFinishLaunchingWithOptions 是怎么回事?

在 Objective-C 中,参数是方法签名的一部分。 您描述的方法的选择器将是application:didFinishLaunchingWithOptions: 这来自Smalltalk ,虽然它可能使方法声明更难阅读,但它使代码实际上易于阅读:

id anApplication;
id someOptions;

[delegate application:anApplication didFinishLaunchingWithOptions:someOptions];

如您所见,生成的调用代码看起来就像您正在阅读一个短语。

至于UIApplication参数,这是您将在整个 Cocoa 中看到的设计选择。 委托中的所有方法都将接收作为其委托的 object 作为其第一个参数。 这使得您可以重用委托,并使其逻辑依赖于它们是委托的 object。

在这种情况下,您可以将相同的UIApplicationDelegate用于不同的UIApplication实例,并使其代码基于某些UIApplication参数有条件。

这就是帮助我得到它的原因。 所有参数均已命名。 奇怪的是,您的第一个参数名称确实是 function 名称的一部分,或者,您可以将其视为:确实没有第一个参数名称。 很多时候,您会看到或编写如下所示的函数:

-(returntype) SomeFunctionWithSuperParameterComingUpNext:(paramtype)param1 SuperParam2:(paramtype2)param2;

请注意,function 名称末尾的废话描述,描述了参数。 ;-)

这真的让我很早以前就被扭曲了,但是你很快就习惯了,而且在使用其他语言时你实际上会错过它。 :-)

希望有帮助,玩得开心!!

didFinishLaucnhingWithOptions: 部分是另一个参数的标识符,launchOptions--这是一个 NSDictionary*--,所以不是在参数(java)之间有逗号,而是一个空格,然后是描述符,然后是冒号,然后是参数。但是,实际的方法签名包括这些标识符或描述符。

编辑:请参阅@pgb 答案以获得更好的描述。

它使代码更易于阅读,并使程序员更难在不知道它们是什么或做什么的地方使用诸如 a、b、c、foo、bar 等蹩脚的变量名称。

例子:

-(returntype) myFunction:(paramater1type)paramater1 paramater2descriptor:(paramater2type)paramater2 paramater3descriptor:(paramater3type)paramter3 {}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
    (NSDictionary *)launchOptions { }

分手有点奇怪。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }

我猜会更容易阅读。 这里有两个参数,application 和launchOptions。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM