setInteractionEnabled
메서드가 다른 클래스 (예 : 네트워크 상태 관리자)에서 호출 될 때 UIViewController의 인터페이스를 조정할 수있는 기능을 데코 레이팅하고 싶습니다. 모든 변경 사항 (있는 경우)은 onInteractionChanged
을 재정 의하여 콘크리트 컨트롤러에 제공해야합니다.프로토콜 확장에서 신속한 종료
import Foundation
typealias InteractionClosure = ((enabled: Bool) -> Void)
protocol Interaction: class {
var onInteractionChanged: InteractionClosure? { get set }
func setInteractionEnabled(enabled: Bool)
}
extension Interaction where Self: UIViewController {
// Default: Do nothing
// Throws: - Extensions may not contain stored properties
var onInteractionChanged: InteractionClosure? = nil
func setInteractionEnabled(enabled: Bool) {
onInteractionChanged?(enabled: enabled)
}
}
extension UIViewController : Interaction {}
어떻게 onInteractionChanged
에 대한 기본 구현을 추가 : 여기 내 코드는? 내 자신의 질문에 대답
오류는 모든 확장 기능에 저장된 속성을 포함 할 수 없다고 말합니다. 액세스 할 때'nil'을 반환하는 계산 된 속성으로 만들어야합니다. 프로토콜은 속성'{get set} '의 설정 기능을 강제해야합니까? 그렇지 않으면 기본 속성 구현을위한 빈 setter가 있어야합니다. 나는 속성을'{get}'으로 만들고, 적합성 유형에 단순히 계산 된 속성 (get 만)을 재정의하거나 저장 속성 (gettable 및 settable)을 사용할지 여부를 선택하도록합니다. – Hamish