我有两个视图控制器(A和B)都具有相同的逻辑写入相同功能的两个视图控制器:怎样避免使用子类和/或委托模式(SWIFT)
class A: UIViewController {
override func viewDidAppear(_ animated: Bool) {
self.contrast(first: nil, second: self.numberOne)
timer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}
@objc private func update() {
if count == 0 {
self.contrast(first: self.numberOne, second: self.numberTwo)
} else if count == 1 {
self.contrast(first: self.numberTwo, second: self.numberThree)
} else if count == 2 {
self.contrast(first: self.numberThree, second: self.numberFour)
} else if count == 3 {
self.contrast(first: self.numberFour, second: nil)
self.timer.invalidate()
}
self.count += 1
}
}
class B: UIViewController {
override func viewDidAppear(_ animated: Bool) {
self.contrast(first: nil, second: self.numberOne)
timer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}
@objc private func update() {
if count == 0 {
self.contrast(first: self.numberOne, second: self.numberTwo)
} else if count == 1 {
self.contrast(first: self.numberTwo, second: self.numberThree)
} else if count == 2 {
self.contrast(first: self.numberThree, second: self.numberFour)
} else if count == 3 {
self.contrast(first: self.numberFour, second: nil)
self.timer.invalidate()
}
self.count += 1
}
}
正如你可以看到他们都使用完全相同的代码。我试图用UIViewController的扩展来解决它,但事情有点混乱。然后我听说了委托模式,但是我找不到与此场景相关的任何示例!
编辑:viewDidAppear方法也完全相同。如果以某种方式我可以覆盖超类的?
您应该使用开关计数而不是使用多个其他的 –
这是*所有*两个视图控制器的代码?如果是这样,那么为什么需要两个单独的类? 'ClassA' *已经是'UIViewController'的子类,并且只是实例化'ClassA'的两个实例(或者设置IB的类)。 – dfd
- >子分类:您可以从UIViewController创建类say myClass,并将其用作类A和B的超类,并在myClass中使用白色常用业务逻辑并调用该方法 –