2016-07-24 71 views
2

注意:我只在這裏談論Swift 2。我們應該爲方法的第一個參數添加一個外部參數名稱嗎?爲什麼?

我所看到的二種方法的命名慣例:

func animateWithDuration(duration: NSTimeInterval, animation:() -> Void) 

func animate(withDuration duration: NSTimeInterval, animation:() -> Void) 

我聽說,其中之一即是多 「SWIFTY」。但我不記得哪個。但爲什麼人們會關心這個呢?調用時這兩個公約看起來幾乎是一樣的:

animateWithDuration(10) { ... } 

經文

animate(withDuration: 10) { ... } 

當您嘗試大聲朗讀的方法了,這是完全一樣的話:

動畫與時間10

那麼哪個更快捷,爲什麼?

回答

1

前者語法是斯威夫特2的首選/默認的語法,而後者是斯威夫特3.

首選/默認語法在WWDC 2016的視頻,Swift API Design Guidelines,他們形容自己的這個老,前者印象Cocoa API中的語法:

因此,當您將所有爲Objective-C編寫的API修改爲Swift而未修改時,它們看起來有點過時了。他們覺得有點不太敏捷。

所以,按照蘋果自己的估計,新的語法更爲Swifty。儘管如此,如果你限制自己去考慮Swift 2.x,爲了保持一致性,你可以輕易地提出一個堅持傳統語法的論點。另外(在我看來,更引人注目的是),你可以開始採用新的語法,你可以自然而然地採用這種新的語法來簡化Swift 3的遷移路徑。

但我認爲這不像「總是在方法名中包含參數名」或「不是」那麼簡單。在Swift 3中有些情況下,我們將定義一個方法,其第一個參數不會有外部參數名稱(就像在Swift 2中,有些情況下我們會爲第一個參數提供一個外部名稱)。最好讓原則in that video(或outlined on the swift.org site)管理您的方法命名實踐。

+0

'你可以開始採用新的語法,你可以自然地這樣做,以緩解Swift 3遷移路徑。絕對是這樣。一致性的臨時邊際收益在幾個月內不值得重構。 – Alexander

1

討論編碼風格是有點多餘的,有很多爭論或反對之一。重要的是Swift 3 API將使用第二種風格,因此建議將其用於Swift代碼。

一些參數,它說明了第二樣式是,它是與多個參數更一致,如

animate(withDuration: 10, andEffect: .Blend) 

另一種說法是,它使得關鍵字參數一致,例如與init

let a = Animation(withDuration: 10, andEffect: .Blend) 

畢竟()調用語法不擺在首位句子風格的方法調用打得那麼好。 Smalltalk或ObjC用這個(IMO)好得多。

相關問題