else if let amout = dataSource?.fixedIncrement 에서 왜 뒤에 ? 안붙음..?
정의 안되어 있을수도 있고, 정의 되어 있어도 Int?니까 옵셔널 체이닝 써야 하는거 아님?
바로 위에 옵셔널 바인딩이랑 차이가 뭐임?? 

import Foundation


@objc protocol CounterDataSource {

    @objc optional func increment(forCount count: Int) -> Int // ((Int) -> Int)?

    @objc optional var fixedIncrement: Int { get } // Int?

}


class Counter {

    var count = 0

    var dataSource: CounterDataSource?

    func increment() {

        // dataSource가 nil일수도 있고, increment가 nil(정의되어 있지 않을 수도 있으므로)일 수도 있으므로..

        if let amount = dataSource?.increment?(forCount: count) {

            count += amount

        // dataSource가 nil일수도 있고, fixedIncrement가 정의되어 있어도...??

        } else if let amount = dataSource?.fixedIncrement {

            count += amount

        }

    }

}