Swift使用相同的名称区分几个功能目的

时间:2016-10-30 18:59:47

标签: swift swift3

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

不幸的是,如果功能没有参数,这种方法将无效。这里的最佳做法是什么?

1 个答案:

答案 0 :(得分: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")