【问题标题】:How does a delegate knows where to invoke function where there are multiple conformance委托如何知道在哪里调用有多个一致性的函数
【发布时间】:2017-05-18 20:25:57
【问题描述】:

我刚刚开始了解 iOS swift 中的委托模式。如果我错了,请纠正我,但这是我的理解:

委派模式用于将任务委派给另一个班级,以保持班级只有一个工作和一个工作,任何不相关的工作将被委派给负责该工作的另一个班级。现在这是令人困惑的部分:

protocol Addition {
    func addTwoNumbers(_ number1: Int, _ number2: Int)
}

class A: Addition {

    func addTwoNumbers(_ number1: Int, _ number2: Int) {
        print("The number is: \(number1 + number2)")
    }
}

class B {

    let apple = 10
    let orange = 20

    var delegate: Addition?

    func runAddition() {
        delegate?.addTwoNumbers(apple, orange)
    }
}

let bob = B()
bob.runAddition()

B 类需要执行一个添加任务,而不是实现该功能,我将让 A 类通过协议来完成这项工作。现在这就是我感到困惑的地方。 B 类如何知道在哪里运行func addTwoNumbers 函数?我的意思是我可以拥有另一个名为 class C 并符合 Addition 协议的类,现在我有两个符合 Addition 协议的类,B 类怎么知道去哪里?

谢谢!

【问题讨论】:

  • 它不知道。如果您运行代码,那么您会注意到 addTwoNumbers() 永远不会被调用。你必须为bob.delegate分配一个值——这意味着告诉bob调用哪个代理。

标签: ios swift delegates


【解决方案1】:

当您调用B 类的runAddition() 方法时,它什么也不做,因为没有为delegate 设置值。

为了让它工作,你需要分配一个实现Addition协议的任何类的实例。

假设我们有 2 个实现 Addition 协议的类:

class Calculator1: Addition {

    func addTwoNumbers(_ number1: Int, _ number2: Int) {
        print("Inside Calculator1 addTwoNumbers method")
        // The rest of your code
    }
}

class Calculator2: Addition {

    func addTwoNumbers(_ number1: Int, _ number2: Int) {
        print("Inside Calculator2 addTwoNumbers method")
        // The rest of your code
    }
}

现在,让我们创建之前类的 2 个对象:

let calculator1 = Calculator1()
let calculator2 = Calculator2()

让我们创建一个类B的实例:

let bob = B()

现在,让我们设置bob 的委托并调用runAddition() 方法:

bob.delegate = calculator1
bob.runAddition()

runAddition() 的输出将是:

Calculator1 中的 addTwoNumbers 方法

现在,让我们为委托设置另一个值,并再次调用runAddition()

bob.delegate = calculator2
bob.runAddition()

runAddition() 的输出将是:

Calculator2 中的 addTwoNumbers 方法

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 2014-02-07
    • 2011-03-21
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2014-04-30
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多