我可以在 Swift (4) 的视图控制器中对隐式展开的选项进行编译时检查吗?

Can I get compile-time checks for implicitly unwrapped optionals in view controllers in Swift (4)?

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

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

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

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

我怎样才能做到这一点?

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

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

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

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

您有几个选择:

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

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

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

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

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