gpt4 book ai didi

swift - 从 viewcontroller extension 引用 viewcontroller outlets

转载 作者:搜寻专家 更新时间:2023-11-01 07:07:50 25 4
gpt4 key购买 nike

我有两个 View Controller SymbolsVCItemsVC。两者都有一个 UIActivityIndi​​catorView,它在每个 View Controller 中以 spinner 的名称输出,如下所示:

class SymbolsVC: UIViewController {
@IBOutlet weak var spinner: UIActivityIndicatorView!
}

class ItemsVC: UIViewController {
@IBOutlet weak var spinner: UIActivityIndicatorView!
}

现在我需要在这些 View Controller 之间编写大量共享代码,例如,一个函数将在其各自的 View Controller 中启动微调器。所以我为 UIViewController 创建了一个扩展,如下所示:

extension UIViewController {
func startSpinner() {
spinner.startAnimating()
}
}

但是,这会导致使用未解析的标识符“spinner”错误。

我错过了什么?

编辑以进一步澄清:我的扩展实际上是一个 IAP。可以从任意数量的 ViewController 调用此 IAP。当其中一个 ViewController 调用扩展中的 IAP 函数时,IAP 函数中的程序流决定何时启动/停止微调器。因此,它需要在扩展中完成。

最佳答案

当编译器看到这个时:

extension UIViewController {
func startSpinner() {
spinner.startAnimating()
}
}

它认为您的模块中的每个 UIViewController 实例都包含此微调器属性,这粗略的是错误的。

因为通常不能在扩展中放置常规的 {set get} 属性,我的解决方案是将微调器放置在继承 UIViewController 的基础 View Controller SpinnerBaseVC 中。然后,将 SpinnerBaseVC 继承到您想要使用微调器属性的任何类。

class SpinnerBaseVC: UIViewController {
@IBOutlet weak var spinner: UIActivityIndicatorView!

func startSpinner() {
spinner.startAnimating()
}
}

// MARK: Classes which can naturally access `spinner` and `startSpinner`
class SymbolsVC: SpinnerBaseVC {
// Here you can access spinner
}

class ItemsVC: SpinnerBaseVC {
// Here you can access spinner
}

关于swift - 从 viewcontroller extension 引用 viewcontroller outlets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47015731/

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