Метод в расширении протокола вызывается вместо реализации метода в View Controller
Поэтому у меня есть viewController, который содержит пользовательский вид,
и этот класс viewController соответствует ViewProtocol
Я ожидаю когда someAction
метод срабатывает в someCustomizedView
это будет печатать " method in otherCustomizedClass called "
но это печатает (" method in extension Called")
вместо.
theNotOptionalMethod
работает просто отлично, но не опциональный метод.
Есть ли что-то, что я неправильно понимаю расширения протокола?
Пожалуйста, помогите, боролись в течение нескольких часов, спасибо
protocol ViewDelegate: class {
func theNOTOptionalMethod()
}
extension ViewDelegate {
func theOptionalMethod(){
print (" method in extension Called")
}
}
class someCustomizedView: UIView {
weak var deleage: ViewDelegate?
@IBAction func someAction(sender: UIButton) {
deleage?.theOptionalMethod()
}
}
class someCustomizedVC: UIViewController, ViewDelegate {
lazy var someView: someCustomizedView = {
var v = someCustomizedView()
v.deleage = self
return v
}()
//...... someView added to controller
func theNOTOptionalMethod() {
// do nothing
}
func theOptionalMethod() {
print (" method in otherCustomizedClass called ")
}
}
1 ответ
Так работают методы в расширениях. Они скрывают реализации в классе.
Чтобы создать протокол с дополнительными методами, вам нужно поместить дополнительный метод в определение протокола:
protocol ViewDelegate: class {
func theNOTOptionalMethod()
func theOptionalMethod()
}
Кроме того, вы можете использовать @objc
а также optional
модификаторы:
@objc protocol MyDelegate : class{
func notOptionalMethod()
@objc optional func optionalMethod()
}
Когда вы звоните optionalMethod
, вам нужно развернуть необязательное:
delegate.optionalMethod?()