合理的 Cocoa 和 Cocoa Touch 默認值

做者:Erica Sadun,原文連接,原文日期:2016-04-12
譯者:趙磊;校對:Channe;定稿:Ceeios

許多 Cocoa 和 Cocoa Touch 的函數調用都是很死板的。幾乎每一個調用都採用廣泛的參數值。爲何不利用 Swift 默認方法來代替?咱們能夠對這種函數進行簡化:git

dismissViewControllerAnimated(flag: true, completion: nil)

能夠這麼調用:github

dismiss()

默認值

SE-0005 中介紹了一系列 ObjC API 經過自動翻譯獲取默認值的方法。在這一提議下,任何符合某種模式的方法均可以提供默認值。objective-c

Daniel Steinberg 和我都喜歡這種默認行爲,咱們還經過 Swift 演化列表來看是否能多增長 Cocoa 和 Cocoa Touch API 的默認值。David Abrahams 回覆說最好是將具體請求放在一塊兒,並經過蘋果雷達系統將它們提交給 UIKit/AppKit 團隊,他們也許能提供傳遞默認值的擴展。swift

如下是咱們列出的一個更新的初步列表。咱們但願你們加入進來幫助擴展這一列表,這樣當咱們向蘋果提交 bug 時必定是深思熟慮過的,而且這種變化能被優先考慮。app

我提了一個綱要,你若是有興趣作些貢獻的話能夠經過評論、twitter 或者郵件聯繫咱們。ide

Controls

咱們認爲 UIControl 的狀態應該默認爲 .Normal。比較一下這兩種調用:button.setTitle("Hello")button.setTitle("Hello", forState: .Normal)。由於這些僅僅是默認值,你隨時能夠經過補全具體的參數來重寫控件狀態(好比改成高亮)。函數

控制型元素的動做同時是很好預測的。Button 一般由 .TouchUpInside 觸發,sliderswitch 則是.ValueChanged。經過提供默認值,只有開發者打算使用非標準模版方法時再補全,這樣能夠極大簡化代碼量。佈局

Core Graphics

咱們想將全部 CG 構造器都初始化爲 0.0,即對 xydXdYwidthheight 這些屬性。這個沒有什麼限制,你既能夠明確全部參數,也能夠基於某些默認值,好比僅用 CGRect(.width: 200, .height: 100) 就能初始化一個矩形。動畫

Views

咱們打算將大部分 UIKit 函數中的 animated 初始化爲 true。不是說 super.viewWillAppear() —— 它應該繼續傳入傳遞給你的動畫參數。咱們是說代替相似 dismissViewControllerAnimated 的函數,大多數的 UIKit(也多是 Cocoa)場景都使用動畫效果。在此處添加一個默認值可以以一種容易理解的「經常使用實踐」方法簡化調用。

Auto Layout

NSLayoutConstraint 有個想當大的歷史包袱。不過幾乎每一個人都贊成將 multiplier 默認設置爲 1.0,將 constant 默認設置爲0.0。

然而,我最初的建議會讓 —— 默認關係(relatedBy:.Equal)、第二項內容(toItem:nil)、第二項屬性(attribute:.NotAnAttribute)出現默認值隱藏參數,引起可讀性下降的問題。尤爲是一般狀況下,老是多個視圖相對彼此進行佈局,而非單一的視圖屬性(NSLayoutConstraint(item: view, attribute: .Width, constant: 400.0)),對這種默認模式的第二部分咱們還沒達成統一意見。

其餘經常使用模式

蘋果的 UIKit Framework Reference 進一步概述了 UIKit 類、擴展、函數、常數和數據類型。我肯定 Cocoa 和該參考庫中必定有相對應的東西。若是你想作些補充的話,能夠幫咱們找這樣的例子:開發者經常使用的 API,有很明顯的默認值,但不得不在每一次調用時都補全,而且這些 API 尚未被收錄到SE-0005

若是你找到這樣的例子,聯繫咱們任何一我的,咱們將把你的反饋更新到列表中。咱們的目標是努力擴展這一列表,並在嚴格審覈後提交給蘋果。

提早感謝!

本文由 SwiftGG 翻譯組翻譯,已經得到做者翻譯受權,最新文章請訪問 http://swift.gg

相關文章
相關標籤/搜索