问题标签 [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 回答
55 浏览

ios - 为什么我必须在使用前解开价值

块定义如下

在某些时候,我正在调用一个块

我使用?是因为我想确保如果块存在,那么做点什么。但是,Xcode 抱怨for循环

我不知道为什么,因为块的返回类型是一个可以有 0 个或多个项目的数组。

有谁知道为什么 xcode 抱怨。

0 投票
3 回答
305 浏览

swift - 防止对象初始化后强制可选展开

我想知道在使用这样的代码时是否可以删除强制展开(Swift):

在这种情况下 currentProductRequest 将 100% 不为零;然而,它是可选的,在上述上下文中,编译器不知道它不会为 nil,它需要强制展开。由于初始化 SKProductsRequest 永远不会产生 nil 我不能使用

我知道的一种方法是让 currentProductRequest 的声明像 var currentProductRequest : SKProductsRequest! 一样隐式展开。然而,这会使编译器认为 currentProductRequest 永远不会是 nil,但事实可能并非如此。

我知道强制展开永远不会导致问题(在这种情况下),但它对我来说似乎很难看。有谁知道是否有办法让编译器知道 currentProductRequest 不会为零,从而消除强制解包。

0 投票
4 回答
13847 浏览

swift - 强制展开选项和隐式展开选项之间的区别

一开始我对强制展开和隐式展开非常困惑。现在,以下理解来自我的自学:

没有可用于隐式展开操作,但有一种称为隐式展开的 Optionals 的东西。隐式展开的 Optional 和普通的 Optional 都是 Optional,不同之处在于当访问隐式展开的 Optional 时,您可以自信地知道在后台有一个有效值并可以使用。普通选项需要if let绑定强制展开 ( !) 操作来访问可选变量背后的可能值。

摘要

强制展开是对普通 Optionals执行的操作。

隐式展开的 OptionalsOptionals,通常用于类初始化,使用时将传递不带感叹号的值。

问题

我对吗?如果我的理解不准确,如果您纠正我,我将不胜感激。

谢谢

0 投票
2 回答
475 浏览

ios - Swift 在关闭时将值解包为 nil,但在代码中的其他地方成功解包?

所以这是我的代码

所以在这个函数的第一行中,我可以调用 highScore 并将其分配给其他东西,但是在闭包中 Xcode 迫使我使用“self!”。并且这样做会以某种方式打开一个可选项,即使我之前调用它告诉我它不是零。我真的很困惑,有很多关于将可选选项解包为 nil 的基本问题,但我发现没有一个似乎与此有关。

非常感谢!

编辑:尝试将“弱”切换为“无主”,尽管没有断点,但我在同一行崩溃并得到“线程 3:EXC_BREAKPOINT”。此消息在另一个屏幕上以绿色显示,并且不突出显示该行

0 投票
1 回答
84 浏览

ios - 在 Swift 中的嵌套包装变量中获取值

目前,我需要这段代码来让我的数据显示在 UITableViewCell 标签上:

或者我可以这样做,但有空运行时错误的风险:

有什么办法可以让它变成这样:

我只想获得一个值,如果任何链数据检索为 nil,则只需为整个操作返回 nil。

编辑:

好的,从 dfri 的评论来看:我至少可以像这样简化它:

我没有比这更简单的了。

我猜这已经足够好了。现在我了解更多可选链接的限制。

编辑2:

所以最后可以变成这样,去掉一个嵌套块:

IMO,dfri 应该将他的评论作为答案,这样我才能接受。:)

0 投票
1 回答
74 浏览

swift - 字典键引用可选结果和快速展开的动机是什么?

我开始研究 swift 并遇到了数组引用和展开要求的字典。我的意思是

要求从“Square”中取出 9,必须编码

那在哪里!真的需要解包操作符。

现在,经典地,当不确定字典的下标是否存在时,典型的编程方法是在使用下标之前测试字典中是否存在下标,或者使用某种类型的异常机制,具体取决于您使用的语言. 我可以看到,对于字典,现在可以快速编写一行代码来从数组中获取值,而无需用测试包围代码。这意味着对我在快速工作时对编码字典引用的看法进行了一些调整。

一旦遇到错误并确定在哪里查找,文档确实会解释所有这些。

我想知道用字典快速提​​供这种行为的动机是什么。也就是说,为什么 Swift 走这条路而不是异常机制或具有测试密钥存在的功能?

我要求相信这些见解将引导我更好地利用 swift 功能。

谢谢!

0 投票
1 回答
76 浏览

swift - 在 Apple 的游戏代码项目模板中展开选项

在您在 Xcode 中创建新游戏项目时创建的 Apple 代码的小样本中,GameScene 有几个函数使用我没有遇到过的展开模式,我看不出它的重点 -

两个问题 - (1) 这很危险,& (2) 为什么不使用更常见的模式 -

我在 SO 或 Google 上找不到与此相关的任何内容...

0 投票
2 回答
255 浏览

ios - 隐式展开的可选字符串的确切用途是什么

我无法理解显式声明的字符串和隐式展开的可选字符串之间的区别。

例如,

如果我们显式地初始化一个字符串,

给出输出

在操场上。

同样,如果我们像这样隐式地打开一个可选字符串,

给出相同的输出

而且一旦我们使用“!” 初始化时,其值不能为 nil。所以我们可以使用显式类型吗?

那我们为什么要使用使用'!'的概念?(隐式展开可选字符串)。

请解释使用“!”的区别或用法 如果可能,请提供代码示例。

0 投票
0 回答
27 浏览

swift - 做,抓住并强制打开包装,错误的方向?

我正在处理一个我真的不想处理但认为do, catch可能能够处理的选项。

对于那些不熟悉 SpriteKit 的人, playsound("correct") 是一个播放声音的动作:

我用函数创建了很多它们,并将它们放入字典中,其中使用字符串键来查找正确的键。

...想象一下,for这里有一个循环将其中的一百个左右放入字典中,其中一个字符串取自音频的文件名,作为播放适当声音的动作的关键。

我要处理的问题是使用字典来返回和播放动作意味着可选的又回来了。

需要解包:

也许我的担心是没有根据的,但这立即让我觉得我必须以某种方式更优雅地执行此操作,以便我可以处理试图确定要播放的声音文件的动作字符串的系统中的潜在故障......是的,对不起那句话。

我的第一个选择是这样的:

这让我觉得没有必要而且啰嗦,所以我看着do

但是,当以问题顶部描述的方式使用时,会导致警告,表明 catch 永远不会被调用。

我做错了什么,或者我是否错误地认为do, catch甚至适合这个?

0 投票
2 回答
1053 浏览

swift - 当字典键上的 Swift "if let ..." 失败时会发生什么?

我有一本字典,当其中没有符合特定标准的预先存在的值时,它故意设置为失败。

在所有其他时间,此命令将起作用,但只有一次。我希望我做对了……失败意味着什么都没有发生。我不需要else任何其他应急代码。

但这是对的吗?