gpt4 book ai didi

ios - 我可以在 Swift (4) 的 View Controller 中对隐式展开的选项进行编译时检查吗?

转载 作者:行者123 更新时间:2023-11-28 05:50:40 27 4
gpt4 key购买 nike

我有一个看起来像这样的类(简化):

class GuideViewController: UIViewController, StoreSubscriber {
var tileRenderer: MKTileOverlayRenderer! // <------ this needs to be set by whoever instantiates this class
override func viewDidLoad() {
super.viewDidLoad()
...
}
}

我的应用程序使用这个 GuideViewController 类来显示许多不同样式的 map ,因此 tileRenderer 实例变量可以有许多不同的值。

我想要编译时保证 tileRenderer 永远不会为 nil,而不是使用隐式展开的可选。

我怎样才能做到这一点?

到目前为止我考虑过但不确定的事情

  • 在 GuideViewController 的 init() 方法中设置 tileRenderer。这是我的第一直觉 this answer暗示这是不可能的,或者是一种反模式。
  • viewDidLoad() 中设置 tileRenderer。这似乎需要使用绕过编译时检查的隐式解包选项。另外,我的印象是 viewDidLoad() 在应用程序的生命周期中只为 View Controller 调用一次
  • 实例化 VC 后手动设置 tileRenderer。例如,

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "GuideViewController")
    vc.tileRenderer = MKTileOverlayRenderer(...) // <----- can I make the compiler force me to write this line?
    navigationController?.pushViewController(vc!, animated: true)

请原谅我问这么天真的问题——我对 iOS 开发还很陌生。

最佳答案

不可能进行编译时检查,因为这需要编译器完全分析程序的流程。

您不能将该属性设置为非可选属性(好吧,您可以 - 参见第 4 点),因为这需要一个自定义初始化器,它实际上不适用于 UIViewController 子类。

你有几个选择:

  1. 如果它是nil,则使用隐式展开的可选并在运行时崩溃 - 希望开发人员能够快速识别他们的错误

  2. 在合适的点(例如 viewWillAppear)检查 nil 并向控制台发出警告,然后在您尝试访问值或调用 fatalError - 这将为开发人员提供更多关于他们做错了什么的提示

  3. 使用可选项并在使用前解包

  4. 使用非可选并提供默认值

选项 4 可能是最佳选项;提供一个不执行任何操作的默认渲染器(或者可能向控制台日志发出警告,表明它是默认渲染器并且开发人员需要提供一个)。

关于ios - 我可以在 Swift (4) 的 View Controller 中对隐式展开的选项进行编译时检查吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074049/

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