做者: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
咱們認爲 UIControl
的狀態應該默認爲 .Normal
。比較一下這兩種調用:button.setTitle("Hello")
和 button.setTitle("Hello", forState: .Normal)
。由於這些僅僅是默認值,你隨時能夠經過補全具體的參數來重寫控件狀態(好比改成高亮)。函數
控制型元素的動做同時是很好預測的。Button
一般由 .TouchUpInside
觸發,slider
和 switch
則是.ValueChanged
。經過提供默認值,只有開發者打算使用非標準模版方法時再補全,這樣能夠極大簡化代碼量。佈局
咱們想將全部 CG 構造器都初始化爲 0.0
,即對 x
、y
、dX
、dY
、width
和 height
這些屬性。這個沒有什麼限制,你既能夠明確全部參數,也能夠基於某些默認值,好比僅用 CGRect(.width: 200, .height: 100)
就能初始化一個矩形。動畫
咱們打算將大部分 UIKit
函數中的 animated
初始化爲 true
。不是說 super.viewWillAppear()
—— 它應該繼續傳入傳遞給你的動畫參數。咱們是說代替相似 dismissViewControllerAnimated
的函數,大多數的 UIKit
(也多是 Cocoa
)場景都使用動畫效果。在此處添加一個默認值可以以一種容易理解的「經常使用實踐」方法簡化調用。
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。