Sono d'accordo con Airspeed Velocity che dovresti usare i sovraccarichi qui, ma li farei in modo diverso. Sbarazzati completamente degli optionals.
func someMethod(#arg1: Sometype)-> Void {}
func someMethod(#arg2: Sometype)-> Void {}
func someMethod(#arg1: Sometype, #arg2: Sometype) -> Void {}
A questo punto, dovrebbe essere ovvio che questi sono davvero diversi metodi:
func someMethodWithArg1(arg1: Sometype)-> Void {}
func someMethodWithArg2(arg2: Sometype)-> Void {}
func someMethod(#arg1: Sometype, #arg2: Sometype) -> Void {}
per rendere questo concreto, considerare se stavamo facendo una classe FixedLengthString
che si potrebbe passare una lunghezza, o una stringa esistente, oppure puoi passare entrambi e ripeterebbe la stringa fino a riempire la lunghezza.
quello che stai descrivendo sarebbe:
func makeString(length: Int?, string: String?) -> FixedString
Ma piuttosto che quello, basta fare i metodi:
func makeStringWithLength(length: Int) -> FixedString
func makeStringFromString(string: String) -> FixedString
func makeStringByFillingWith(string: String, totalLength: Int) -> FixedString
Questo rende più chiaro come funziona il tutto, e non è possibile chiamare non correttamente. È così che dovresti farlo anche in ObjC.
fonte
2015-04-07 15:28:36
Penso che questo abbia più senso e rende chiaro l'intento, grazie – bolnad