问题标签 [forced-unwrapping]

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 回答
431 浏览

swift - Int() 不会从 String 转换为 Optional Integer (Swift)

我是编程新手,从 Swift 开始。我遇到的第一个问题如下:

我有 4 个变量

我需要计算整数的总和(如果不是整数,它将变为 nil)

等等..

据我了解, Int() 应该将每个元素转换为可选整数。

那么我应该通过转换 Int 来使用强制展开?到 Int,然后我才能将它用于我的目的。但是,当我计算变量的总和时,编译器会将它们作为字符串求和。

输出:

为什么我的变量(声明为字符串,然后使用 Int() 转换为可选整数)不起作用?

0 投票
4 回答
4021 浏览

ios - nil 合并运算符 '??' 的左侧 具有非可选类型“字符串”,因此从不使用右侧

我有一个以下代码,我试图用它来初始化一个变量并对其执行一些操作。

但是我收到警告

nil 合并运算符 '??' 的左侧 具有非可选类型“字符串”,因此从不使用右侧。

当我删除?? .none我的项目运行良好没有问题但是当我运行我的单元测试时我得到一个错误

致命错误:在展开可选值时意外发现 nil

我发现解决此问题的唯一方法是使用此代码。

我想了解为什么这样的事情有效:

但这失败了:

0 投票
4 回答
369 浏览

swift - 在 swift 4.1 中使用 nil 合并进行隐式展开时出现意外的“some()”

我在运行此代码时遇到了来自运行 swift 4.1 的 xcode 9.3 的奇怪响应:

响应是some(2)2(强制展开)(检查下图)。

这是some从哪里来的?(请解释或提供参考以了解更多信息some

在此处输入图像描述

0 投票
2 回答
64 浏览

swift - Swift:解析服务器登录 facebook 无法检索邮件

我不明白为什么我无法检索用户的电子邮件。

我收到错误

线程 1:致命错误:在展开可选值时意外发现 nil

我设法检索了除邮件之外的所有数据......查看我的代码:

0 投票
1 回答
405 浏览

swift - 为什么使用隐式解包或强制解包让应用程序在某个阶段崩溃无益?

我的观点是,在某些地方,我们知道变量根本不会有 nil,但由于某种原因,我们无法在类的 init 函数中实例化它,所以我们必须将其设为可选。

我也知道我们可以使用可选绑定或保护技术来轻松摆脱它。

但是,在我看来,由于隐含的 unwrap/force unwrap 让应用程序在一些非常愚蠢的错误中崩溃,这对处于开发阶段的开发人员是有益的

我的例子是:

在这种情况下,我可以在每个测试用例中制作TopStoriesViewModel一个?then 保护它,或者让它,但我觉得没有必要。我知道我也可以用viewModel?.xxx。但这不是重点。

我的问题是,我在某些特定情况下(例如我给出的示例)是否正确,强制展开/隐式展开是有益的。

0 投票
3 回答
280 浏览

swift - 为什么我不能使用 Swift 解开这个可选值?

我正在尝试获取第一条记录的值,即“2018-05-04 09:00:00 +0000”。当我打印出 `firstRecord' 时,我在终端中得到一个可选值:

可选(2018-05-04 09:00:00 +0000)。

然后我试着像这样解开它:

现在 Xcode 给我一个错误,说你试图解开一个非可选值。

知道我在哪里犯错了吗?

0 投票
2 回答
487 浏览

swift - 强制展开或使用可选链接来设置属性

给定一个具有已设置属性的可选 var pinImageView: UIImageView?,我不确定设置属性的首选方式。例如:

或者

0 投票
1 回答
33 浏览

ios - 将 [String:AnyObject] 类型的字典分配给 [String: String] 给出零错误

嘿,我是 Swift 和 IOS 开发的新手。我面临一个搜索了很多的问题。但没有得到任何解决方案。我有 [String:AnyObject] 类型的字典,并希望将其分配给 [String:String] 类型的其他字典。Xcode 显示一个错误,即“致命错误:在展开可选 val 时意外发现 nil”我三倍检查没有 nil 值。下面是我的代码片段字典在这里

这是将一个字典分配给另一个字典。

在这一行它再次显示错误我很确定没有零值。

0 投票
1 回答
49 浏览

swift - 我怎样才能避免这种情况下的强制取消变形?

如何避免在下面的代码中强制展开?

0 投票
1 回答
40 浏览

ios - iOS IBOutlet 非零,不知何故被清除为零

TL;DR:我有一个IBOutlet( UILabel) 已在 Storyboard 中正确连接。访问(展开)它在viewDidLoad()......内工作正常,但几秒钟后它的值为零。一个观察点说,在调用 之后,出口立即改变viewDidLayoutSubviews()但是......print()结束时的调用viewDidLayoutSubviews()显示它非零。

这与IBOutlet is nil非常相似,但他的解决方案(使用 跟踪值didSet())不起作用。(有很多相关的帖子,但都有微不足道的解决方案。)

我做了什么:

  • 将插座重新连接到标签 - 从两侧
  • 删除标签并重新连接
  • 清理项目
  • 删除了 DerivedData
  • 退出并重新启动 Xcode
  • 退出并重新启动我的 Mac
  • didSet()向插座 添加了一个方法。
    • 它在期间触发viewDidLoad()并显示非零值。
    • viewDidLoad()我设置它的文本值没有问题
    • 它在 nil-unwrapping 崩溃之前不会触发
  • 向变量添加了一个观察点。
    • 确实会在崩溃之前触发(紧随其后viewDidLayoutSubviews()并显示以下内容:

Xcode 调试器截图

如前所述,在观察点 ( viewDidLayoutSubviews()) 之前最近的方法调用退出时,出口是非零的。

这些崩溃似乎总是涉及特定超级视图的子视图。我在 superview 的出口中添加了一个观察点,但它永远不会触发。

是什么促使我的代码放弃这个弱引用?