首页 > 解决方案 > 同一对象中多个事件的委托或关闭

问题描述

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

对于这种情况有更好的方法还是只使用委托的更好方法?

标签: iosswiftdesign-patternsdelegatesclosures

解决方案


如果您的可能情况有限,我将有一个以枚举作为参数的闭包,并将有一个 switch case 来决定触发哪个方法

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

例子:

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并具有相同的 switch 块来决定触发哪个方法

希望这可以帮助


推荐阅读