我刚刚开始了解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
函数的位置?我的意思是我可以拥有另一个名为C类的类并符合Addition
协议,现在我有两个符合Addition
协议的类,B类如何知道去哪里?
谢谢!
答案 0 :(得分:1)
当您拨打runAddition()
类B
的方法时,它将不执行任何操作,因为delegate
没有设置值。
要使其正常工作,您需要分配实现 Addition
协议的任何类的实例。
比方说,我们有两个实现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()
的输出将为:
Inside Calculator1 addTwoNumbers方法
现在,让我们为委托设置另一个值,然后再次调用runAddition()
:
bob.delegate = calculator2
bob.runAddition()
此处runAddition()
的输出将为:
Inside Calculator2 addTwoNumbers方法
希望这有帮助!