post-custom-banner

(참조)

Implementing Delegate with Protocols

Delegate Pattern(1)의 CounterControl의 예시처럼, ControlCounter의 권한을 필요 이상으로 가지고 있다. 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
profile
RTFM
post-custom-banner

0개의 댓글