Я всегда задавался вопросом, почему, когда я вижу примеры протоколов, люди обычно добавляют большинство функций через расширение. Например:В чем причина добавления функций в протокол через расширение, почему бы просто не поместить его в определение самого протокола?
protocol Flashable {}//Can be empty becuase function is in extension
extension Flashable where Self: UIView //Makes this protocol work ONLY if object conforms to UIView (ie. uilable, uibutton, etc.)
{
func flash() {
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn, animations: {
self.alpha = 1.0 //Object fades in
}) { (animationComplete) in
if animationComplete == true {
UIView.animate(withDuration: 0.3, delay: 2.0, options: .curveEaseOut, animations: {
self.alpha = 0.0 //Object fades out
}, completion: nil)
}
}
}
}
Что за расширение? почему бы просто не включить его в определение исходного протокола?
ну почему не просто расширить UIView? Я имею в виду, что мы на самом деле в конечном итоге расширяем UIView? – Honey
@Honey Это хороший вопрос, но это не то, о чем спрашивал ОП. Не меняйте тему. – matt
Я следую своему вопросу, можно найти [здесь] (http://stackoverflow.com/questions/41706504/why-should-not-directly-extend-uiview-or-uiviewcontroller) – Honey