问题标签 [optional-binding]

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 投票
2 回答
74 浏览

xcode - 无法在可选绑定中使用可选 int "possibleNumber"

我是 Swift 新手,正在尝试学习可选绑定的概念。我想出了以下代码:

Xcode Playground 输出错误信息:

但是,当我添加“!” 至 if let actualNumber = Int(possibleNumber!){

Xcode 显示另一个错误信息:

为什么会这样?

0 投票
1 回答
181 浏览

swift - swift:安全访问 SCNNode 数组的字典

我对 Swift 比较陌生,还没有掌握可选的安全方面。

我有一本类型的字典[String: [SCNNode]]。给定的分子将具有多个组件作为[SCNNode]. 对于那个分子,我检索这个组件数组并将每个元素分配SCNNode给要显示、操作和动画的本地元素。

为了有选择地绑定它,编译器似乎对此很满意。

我不清楚?我对此的阅读表明我们正在以一种我们不在乎是否有零的方式展开包装。但这是否使这个可选绑定比上面的强制展开更好?或者这是“可选链接”?我是否应该在分配时只进行检查components?我应该担心这里的安全吗?我所做的唯一“升级”测试是在将字典存档分配给moleculeDictionary.

我将有数百个这样的任务,所以我想把它做好。欢迎就处理此问题的最佳方法提出建议!

谢谢,伯恩

0 投票
3 回答
122 浏览

swift - 打印一个nil对象编译器说“unresolved identifier”后面发生了什么?

我尝试了以下代码,但出现错误。

错误:

对象actualNumber背后发生了什么?我在可选绑定的第一部分声明了它:“if let actualNumber: Int .....”那为什么它“未解决”?嗯...“未解决”到底是什么?

我想打印一个 nil 是错误的,但为什么它是错误的?我不知道。有人可以解释一下吗?顺便说一句,actualNumber 里面真的是零吗?如果是这样,我怎样才能“看到”它?

0 投票
2 回答
284 浏览

swift - Swift 可选绑定,为什么需要本地 var?

我正在阅读 Apple 关于可选绑定的开发人员文档

为什么我不能使用:

如果有一些可选的?{

陈述

}

代替

if let constantName = someOptional {

陈述

}

为什么不需要局部变量或常量?

0 投票
3 回答
361 浏览

swift - 可选绑定,这里的“绑定”这个词到底是什么意思?

可选绑定是一种找出可选是否包含值的方法,如果是,则使该值可用作临时常量或变量。

问题绑定是否意味着将有效值分配给临时常量/变量的操作?即将这两件事“绑定”在一起?

0 投票
3 回答
520 浏览

swift - 使用隐式解包选项但测试 nil 与可选绑定是否存在技术缺点?

好的,所以我知道在 Swift 中使用可选项的正常方法是通过可选绑定来解包它们,就像这样......

但是我也看到了以下使用隐式解包选项的方式,我个人认为它看起来更干净,因为它不仅不需要额外的变量,而且它还“读”得更好,更像英语(即“如果这是not nil, then...') 和可读性是 Swift 的核心原则之一(尤其是在即将到来的 Swift 3.0 中)。

然而,关于后者,斯威夫特的“纯粹主义者”将此称为“代码气味”,并坚持认为这是“糟糕、糟糕、糟糕!!”......但他们从不解释原因!所以……为什么会这么糟糕?

注意:是的,我知道 Optional 链接和其他此类功能,它们不能与隐式展开的选项一起使用,它们都是非常酷的功能,但我特别询问针对 nil 测试隐式展开的选项的技术缺点vs 可选绑定。

我希望的是一个比另一个更好的可量化的技术原因(即编译器优化、更好的安全检查、性能等)。换句话说,不仅仅是“嘿,因为那不是 'Swifty' 方式去做吧!' 希望这是有道理的。

更新

实际上,我只是找到了一种方法来解决我的一个问题(至少以肤浅的方式),即必须创建一个新变量来保存未包装的变量。这里的诀窍是,由于展开的变量实际上与可选变量本身位于不同的范围内,因此您可以使用完全相同的名称。

此外,在括号本身内部还有另一个范围,它也可以有一个名为 stringA 的变量。这意味着您现在可以拥有三个“stringA”变量(但并不意味着您应该!)...

  1. 可选的
  2. 展开的可选
  3. 括号内的一个新的局部变量

这是显示此内容的疯狂代码...

再说一次,我不会宽恕这个!!我只是展示了一些其他人可能会从具有指导意义的角度觉得有趣的代码。我确实做到了!

0 投票
1 回答
101 浏览

swift - Swift 2.2 上的可选绑定错误?

上面的代码引入了下面的错误;

可选类型“字符串?”的值 未拆封;你的意思是用'!' 或者 '?'?

从这个屏幕截图中可以看出;

在此处输入图像描述

sender.currentTitle是可选的。

以下是 Apple 的“ The Swift Programming Language (Swift 2.2) ”的摘录,其示例代码就在其下方;

如果可选值是nil,则条件是false并且大括号中的代码被跳过。否则,可选值被解包并分配给常量 after let,这使得解包值 在代码块内可用。

这是该摘录的示例代码;

因此,出于这些原因,我认为要么我错过了某些东西,要么我遇到了一个错误

我也在 Playground 上尝试过类似的东西,但没有出现类似的错误;

在此处输入图像描述

这是我的 Swift 版本;

0 投票
1 回答
2590 浏览

java - 子模块的故障安全注入器。google guice 中的可选绑定

我有一个名为 ChildPlugin 的子模块,我从主模块注入类,如下所示:

问题是我不知道主模块是否绑定ExampleClass,如果不是,Guice 在创建注入器时会抛出异常。我想要做的是让 Guice 通过null或者Optional.empty如果 ExampleClass 没有绑定。

我无权访问主模块,因此无法将活页夹更改为ExampleClassto OptionalBinder,我尝试了@Nullableand Optional<ExampleClass>inChildPlugin.setDemo方法,但没有成功。

0 投票
5 回答
176 浏览

ios - 防范具有 nil 可选值的开关按钮

如果在设置中设置了开关,我有一段代码将运行,如下所示:

我的问题是,如果开关从未被激活,程序将失败,因为编译器指出,“致命错误:在展开可选值时意外发现 nil”

那么我的问题是,在使用上述语句中的 switch 之类的 bool 时,如何最好地防止出现 nil 值。

我尝试过 if let 语句和 guard 语句,但编译器抱怨这些不能与 bool 一起使用。

0 投票
1 回答
246 浏览

swift - 任何不一致的铸造?在可选绑定期间进入 Swift 中的协议

我在某些 Swift Optional Binding 与强制转换为协议时遇到了问题。我在一个运行良好的操场上有以下代码。

我在 watchKit 中使用与传入的一条信息完全相同的协议和结构,awake(withContext context: Any?)并且与 cast 的可选绑定在那里失败。

如果有人能告诉我为什么这在操场上有效,但在 watchKit 类方法中无效,我将不胜感激。

我觉得我错过了一些非常明显的东西。