[英]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.