私はいくつかの移行プロトコルを書いています、と私はUIViewのクラスが利用できるようにそれらをしたいと思います:プロトコルをある種類のクラスに制限できますか?
public protocol TransitioningView where Self: UIView
{
func transitionDelay(pushFrom: UIView?) -> TimeInterval?
func transitionDuration(popTo: UIView?) -> TimeInterval
func transitionDuration(pushFrom: UIView?) -> TimeInterval
func animateTransition(popTo: UIView? , finished: ((Bool) -> Void)?)
func animateTransition(pushFrom: UIView?, finished: ((Bool) -> Void)?)
}
しかし、これは非常に適切ではないようです。コンパイラは、UIViewとしてTransitioningViewにキャストされたUIViewを考慮しません。
例:時々私は私がTransitioningViewであることが確認されているビューの周りに渡したいので
let x = myController.view as? TransitioningView
x.animateTransition(popTo: nil, finished: nil) // OK
x.backgroundColor = .clear // NOPE
これは少し面倒です。より良いパターンがありますか?あなたの例では
私は推測、あなたは次のようになります 'TransitioningView'プロトコルにいくつかのプロパティを追加することができます'var view:UIView {return self as UIView}' 'のように使用し、xvのように使用しますiew.backgroundColor、または単にmyController.viewにアクセスしてください – JuicyFruit