簡體   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