2017-04-18 51 views
1

這些方法中的哪一個遵循Swift思想?Swift方法中的第一個參數標籤

  • func addChapter(_ chapter: Chapter)
  • func add(chapter chapter: Chapter)
  • func add(_ chapter: Chapter)
+5

我認爲最後一個遵循Swift 3 API設計指南 – Sweeper

回答

1

TLDR:

根據chapter信息是否是重要的其他方法/含義區別,你應該使用第一或第三個選項。不是第二種選擇。

包含避免使用名稱的人閱讀代碼時出現歧義的所有單詞。

...,如果第一個參數形成的語法短語的部分,省略它的標籤,附加任何前述字基本名稱,例如x.addSubview(y)

(從API Design Guidelines


這也不是那麼容易不知道的類來決定。

讓我們考慮這是一類:

class Book { 
    var chapters: [Chapter] 
    var pages: [Page] 
    var metadata: [MetaData] 
} 

如果你看看Swift Evolution 0005有關辦法的OBJ-C方法是進口的,你可以學習的首選方式導入方法[UIView addGestureRecognizer:]addGestureRecognizer(_:UIGestureRecognizer)

注的理由:

如果我們放棄GestureRecognizer,只留下加,我們結束了,在概念上修改gestureRecognizers財產,但使用過於通用名稱這樣做的方法。

這就是爲什麼有一個規則

切勿從一個相匹配的封閉類的屬性方法的基本名稱修剪後綴:

你的第一個選項是那麼解決方案正確

在另一方面,如果類具有以下形式:

class Chapters { 
    private var chapters: [Chapter] 
} 

(例如陣列狀容器)

然後add(_:)是正確的解決方案。

不應使用第二個選項add(chapter:)

0

我認爲這取決於形勢。

例如,您有User結構。

struct User { 
    static func add(with userId: String) { 
     // ... 
    } 

    static func addFollower(for userId: String, _ followerId: String) { 
     // ... 
    } 
} 

而當你將使用它:

User.add(with: newUserId) // Like sentense: User add with new user Id 

而且

User.addFollower(for: currentUserId, followerId) // Like sentense: User add follower for current user Id 

希望它可以幫助

1

API Design guidelines,第一個似乎是正確的:

// Clear 
func addChapter(_ chapter: Chapter) 
variable.addChapter(x) 

// Not clear 
func add(chapter chapter: Chapter) 
variable.add(chapter: x) 

// Not clear 
func add(_ chapter: Chapter) 
variable.add(x) 

注意:改變了蘇丹的評論後的答案,請參考他的回答。

+0

第二個是從您引用的API設計指南中不正確的。 – Sulthan

+0

我認爲你指的是「忽略不必要的單詞」,但它取決於變量類型本身:例子中的「元素」是一個非常通用的東西,所以類型在變量名稱本身中指定 - 示例提供「cancelButton」;在答案的章節中,這不是一般性的東西,所以變量名稱不是特定的,比如「first」,「second」等等:在這種情況下,我更喜歡在方法定義中提供上下文。 –

+0

我指*「否則,如果第一個參數構成語法短語的一部分,則省略其標籤,將任何前面的單詞附加到基本名稱」* – Sulthan

0

個人而言,我會去與

func add(chapter: Chapter) 

該解決方案似乎是最清楚的給我。

相關問題