委托或关闭同一对象中的多个事件

时间:2019-02-20 11:27:59

标签: ios swift design-patterns delegates closures

var tableView: MyTableView?
tableView?.onGoToA = {
    self.goToA()
}
tableView?.onGoToB = {
    self.goToB()
}
tableView?.onGoToC = {
    self.goToC()
}

在这种情况下是否有更好的方法,还是仅使用委托更好?

1 个答案:

答案 0 :(得分:3)

如果可能的情况有限,我将使用以枚举作为参数的单个闭包,并使用切换用例来确定触发哪种方法

如果每个事件都有一个与之关联的值,那么您也可以利用具有关联值的枚举:)

示例:

enum EventType {
    case toA
    case toB
    case toC
}

将您的关闭声明为

var routerBlock: ((EventType) -> ())? = nil

最后将路由器模块实现为

tableView?.routerBlock = {[weak self] (eventType) in
            switch eventType {
            case .toA:
                self?.gotoA()
            case .toB:
                self?.goToB()
            case .toC:
                self?.goToC()
            }
        }

您也可以对委托使用类似的方法。除了拥有3个委托方法,您可以拥有一个采用EventType并具有相同的开关块来决定触发哪种方法的方法

希望这会有所帮助