问题标签 [swift-optionals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
66 浏览

swift - 为什么尽管没有 nil 值存在,但仍显示“致命错误:在展开可选值时意外发现 nil”?

我一直在调查这个错误一段时间,但我仍在努力寻找答案。

我理解这个错误背后的概念,但我不明白为什么它仍然通知我,即使我觉得我已经从等式中删除了任何 nil 值(<- 短语,而不是代码)。

这个结构通过一系列视图传递,它应该在消息界面中呈现。

感谢您的帮助,我觉得好像我一直在以错误的方式看待这个,或者我错过了一些东西,这是一个简单的修复:)

0 投票
1 回答
239 浏览

swiftui - 如何为 SwiftUI 正确使用已发布的可选属性

为了提供一些上下文,我在我们的应用程序中编写了一个订单跟踪部分,它每隔一段时间就会从服务器重新加载订单状态。屏幕上的 UI 是在 SwiftUI 中开发的。我需要屏幕上的可选图像,该图像随着订单在状态中的进展而变化。

当我尝试以下一切正常...

我的 viewModel 是一个 ObservableObject: internal class MyAccountOrderViewModel: ObservableObject {

这有一个发布的属性: @Published internal var graphicURL: URL = Bundle.main.url(forResource: "tracking_STAGEONE", withExtension: "gif")!

在 SwiftUI 中使用如下属性: GIFViewer(imageURL: $viewModel.graphicURL)


我的问题是该graphicURL属性的占位符值可能不正确,而我的要求是它是可选的。将发布的属性更改为:@Published internal var graphicURL: URL?会导致我的 GIFViewer 出现问题,该问题正确地不接受可选 URL:

Cannot convert value of type 'Binding<URL?>' to expected argument type 'Binding<URL>'

尝试明显的展开graphicURL会产生此错误:

Cannot force unwrap value of non-optional type 'Binding<URL?>'


使这项工作的正确方法是什么?我不想在属性中输入一个值,并检查该属性是否等于占位符值(即将其视为 nil),或者假设该属性始终为非 nil 并且不安全地强制以某种方式展开它。

0 投票
0 回答
54 浏览

swift - 在可选方法属性中意外发现 nil

我一直在寻找这个答案,但我没有找到任何专门解决这个问题的东西,或者我没有完全掌握我所发现的。

我有一个方法,该方法具有一个可选属性,该属性在执行 if 语句之前在调试器中单步执行代码时引发致命错误。一旦我使用 F7 进入 queueTrack 方法,错误就会发生。确切的错误是“致命错误:在展开可选值时意外发现 nil。”

该方法定义为:

给我带来麻烦的项目是 gameController 属性,我已将其定义为可选。在这种特殊情况下,我为 gameController 属性传递了“nil”,因为应用程序在这个特定点没有运行游戏,并且调用类没有 GameController 的实例,但我在方法中需要该属性,所以代码是可重复使用的。

我知道是 GameController 给了我问题,因为如果我删除了 gameController 属性,我不会收到错误消息。

对我来说疯狂的是,当我看到该错误并且应用程序继续执行时,我可以按 CMD+CTL+Y,就好像没有任何问题一样。如果我没有单步执行代码,则当应用程序在调试模式下运行时,错误永远不会出现在调试器控制台中。