gpt4 book ai didi

ios - 如何从 subview Controller 重新定义协议(protocol)扩展

转载 作者:行者123 更新时间:2023-12-04 07:27:09 25 4
gpt4 key购买 nike

我有一个带有定义功能扩展的协议(protocol):

protocol DataFetch where Self: UIViewController {
var data: [SomeData]! { get set }
func fetchData()
func didFetch()
}

extension DataFetch {
func fetchData() {
/// fetch data
}
func didFetch() {
/// do something after fetching data
}
}
然后,我有一个符合协议(protocol)的 View Controller 以及一个从父 View Controller 继承的 subview Controller :
class ParentViewController: UIViewController, DataFetch {
var data: [SomeData]! {
didSet {
didFetch()
}
}

override func viewDidLoad() {
super.viewDidLoad()
fetchData()
}
}

class ChildViewController: ParentViewController {
func didFetch() {
/// do something else
}
}
我想覆盖 subview Controller 中的一个继承函数,但是由于您不能使用协议(protocol)扩展来做到这一点,所以我试图简单地重新定义函数定义。但是,我发现 subview Controller 中重新定义的函数没有在 didSet 内被调用。 .

最佳答案

这更像是一种解决方法,但由于 didSet 似乎只处理当前范围(ParentViewController)并且看不到 ChildViewController 中定义的内容,而且因为您不能使用 override实现时的关键字didFetch在 ChildViewController 中强制使用该解决方案引入了一个新功能,因此我们可以制作 override按预期工作
首先在父 Controller 中新建一个函数,从didSet调用如下

class ParentViewController: UIViewController, DataFetch {
var data: [String]! {
didSet {
workaround()
}
}

func workaround() {
didFetch()
}
//...
}
现在覆盖子 Controller 中的这个函数和正确的 didFetch将被调用
class ChildViewController: ParentViewController {
override func workaround() {
didFetch()
}
//...
}

关于ios - 如何从 subview Controller 重新定义协议(protocol)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68154016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com