2016-10-30 37 views
0

在Swift中,用幾個功能區分幾個功能用途的最佳方法是什麼? 例如,我有以下代碼:用同一個名字快速區分幾個功能用途

protocol SomeProtocol { 
    func simpleFunc() -> Bool 
    func simpleFunc() -> Int 
    func simpleFunc(type: SomeType, x: Int, y: Int) -> [SomeModel] 
    func simpleFunc(type: SomeType, z: String) -> [String] 
} 

當我將使用這些功能,這將是不明確什麼是任何此類功能的目的。我想做一些類似於默認的tableView功能。 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 當我選擇此功能,據我所知,它是用於didSelectRowAt

所以我做了這樣的事情:

protocol SomeProtocol { 
    func simpleFunc() -> Bool /* purpose1 */ 
    func simpleFunc() -> Int /* purpose2 */ 
    func simpleFunc(purpose3 type: SomeType, x: Int, y: Int) -> [SomeModel] 
    func simpleFunc(purpose4 type: SomeType, z: String) -> [String] 
} 

不幸的是如果函數沒有參數,這種做法是行不通的。這裏的最佳實踐是什麼?

+0

看看[Swi英尺API指南](https://swift.org/documentation/api-design-guidelines/),引用例如_Naming_部分:_「包含避免歧義所需的所有單詞」_。 – dfri

+0

最佳做法是避免在沒有參數的情況下對函數進行相同的命名。 – Aaron

+0

從技術上講,您將通過函數的返回類型知道。一個返回Bool,一個返回Int。但是,正如dfri所說,您應該查看命名準則。 – JustinM

回答

1

從實際的角度來看,最後兩個函數實際上並沒有相同的名稱。在您的第一組代碼,最後兩個需要被稱爲:

simpleFunc(type: whatever, x: 5, y: 42) 
simpleFunc(type: whatever, z: "Hi") 

,並在第二組的代碼,最後兩個變化:

simpleFunc(purpose3: whatever, x: 5, y: 42) 
simpleFunc(purpose4: whatever, z: "Hi") 

無論哪種方式,調用者沒有按不要簡單地使用simpleFunc。所有的參數也涉及到。

鑑於此,沒有理由爲什麼前兩個功能不能簡單地命名爲適當,例如:

func simpleFuncPurpose1() -> Bool 
func simpleFuncPurpose2() -> Int 

然後,他們被稱爲,符合市場預期:

simpleFuncPurpose1() 
simpleFuncPurpose2() 

共同所有,結合你的第二組代碼,這四種方法現在叫做如下:

simpleFuncPurpose1() 
simpleFuncPurpose2() 
simpleFunc(purpose3: whatever, x: 5, y: 42) 
simpleFunc(purpose4: whatever, z: "Hi")