2016-10-30 5 views
0

Was ist der beste Ansatz, um mehrere Funktionen Zwecke mit dem gleichen Namen in Swift zu unterscheiden. Zum Beispiel habe ich den folgenden Code:Swift Unterscheiden mehrere Funktionen Zwecke mit dem gleichen Namen

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

Wenn ich diese Funktionen verwenden wird es nicht klar, was der Zweck jeder dieser Funktionen ist. Ich möchte etwas tun, wie mit Standardfunktionen tableView getan wird. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) Wenn ich diese Funktion wähle ich verstehe, dass es für didSelectRowAt

verwendet wird, so habe ich so etwas getan:

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] 
} 

Leider, wenn die Funktion dieser Ansatz nicht funktioniert hat keine Parameter. Was sind die besten Praktiken hier?

+0

Werfen Sie einen Blick auf die [Swi ft API-Richtlinien] (https://swift.org/documentation/api-design-guidelines/), wobei z. der _Naming_-Abschnitt: _ "Alle Wörter einschließen, die benötigt werden, um Mehrdeutigkeit zu vermeiden" _. – dfri

+0

Die beste Vorgehensweise besteht darin, die identische Benennung Ihrer Funktionen zu vermeiden, wenn sie keine Parameter haben. – Aaron

+0

technisch kennen Sie die Rückgabetypen an den Funktionen. Man gibt Bool zurück, man gibt Int zurück. Wie Sie jedoch schon gesagt haben, sollten Sie sich die Benennungsrichtlinien ansehen. – JustinM

Antwort

1

Die letzten beiden Funktionen haben aus praktischer Sicht nicht den gleichen Namen. In Ihrer ersten Gruppe von Code, müssen die letzten beide als genannt werden:

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

und in der zweiten Gruppe von Code, die beide letzte Änderung:

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

So oder so, doesn der Anrufer verwende einfach . Alle Parameter sind ebenfalls beteiligt.

dies gegeben, gibt es keinen Grund, warum die ersten beiden Funktionen nicht einfach in geeigneter Weise so genannt werden können:

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

Dann sie genannt werden, wie erwartet:

simpleFuncPurpose1() 
simpleFuncPurpose2() 

Alle zusammen , kombiniert mit Ihrer zweiten Gruppe von Code, werden die vier Methoden jetzt wie folgt aufgerufen:

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