
Delegate Pattern(1)의 Counter와 Control의 예시처럼, Control은 Counter의 권한을 필요 이상으로 가지고 있다. Protocol을 이용함으로써,Control에서 Counter로 부터 위임받은 권한을 제한할 수 있다.!!!!
아래의 예시처럼, CounterDelegate는 오직 increment 메소드만 가지고 있다.
protocol CounterDelegate {
func increment() -> Void
}
Control의 예시
class Control {
private var delegate: CounterDelegate // Counter가 아닌 CounterDelegate를 참조한다.
init(delegate: CounterDelegate) {
self.delegate = delegate
}
func buttonClicked() {
self.delegate.increment()
}
}
CounterDelegate의 Protocol사용을 위한, Counter에서의 허용(?) -> 내가 이해한 바로는, CounterDelegate라는 추상 메소드를 만들고, Counter에서 구현을 한 뒤, Control에서 사용하는 것????
class Counter: CounterDelegate { // Counter를 선언할 때, Type을 지정하면 됨
private var counter: Int = 0 {
didSet { print("Valor do contador: \(counter)") }
}
func increment() {
self.counter += 1
}
}
전체 코드...
protocol CounterDelegate {
func increment() -> Void
}
// Delegate
class Counter: CounterDelegate {
private var value: Int = 0 {
didSet { print("Counter value: \(value)") }
}
func increment() {
self.value += 1
}
}
// Delegator
class Control {
private var delegate: CounterDelegate
init(delegate: CounterDelegate) {
self.delegate = delegate
}
func buttonClicked() {
self.delegate.increment()
}
}
let counter = Counter()
let control = Control(delegate: counter)
control.buttonClicked()
// Counter value: 1
control.buttonClicked()
// Counter value: 2