问题标签 [optional-chaining]
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.
swift - 更改为使用可选链接替换 swift 中的强制展开时有什么区别?
调用对象实例的函数时,对象可能不存在(可选类型),似乎可以在对象名后面加一个问号,而不是在对象名后面加一个感叹号,不会崩溃。
是不是在使用强制展开的地方,你总是可以改为使用可选链接,结果是一样的?如果是,有什么区别?
ios - 获取可选链的负数
这是不允许的(错误的表达方式)
是否可以在 1 行中检查可选链表达式的负数?
swift - Swift 的可选链接是从左到右懒惰地评估的吗?
该文档似乎没有明确提及可选链接评估的顺序,只是:
多个查询可以链接在一起,如果链中的任何链接为零,则整个链都会优雅地失败。
可能看起来很明显,但我需要确切地确认发生了什么,并认为这可能对其他人有帮助。例如,我们能够安全地做这种事情吗?
swift2.2 - 什么是'!' 和 '?' 用于 Swift 的标记
当我从编程转变Objective-C
为Swift
编程时,我遇到了' !
'(感叹号)和' ?
'(问号),它们通常必须放在 a property
、 a method
call 等之后。这些标记是用来做什么的,如果我们没有使用它们?
我在网上搜索了一个彻底的答案,但找不到任何答案。所以我决定把我的答案放在这里,以防有人正在寻找一个明确的答案。
我还在下面的答案中包含了一个与我的问题类似的问题的链接,您可以在其中找到有关如何以及在何处使用这些标记的进一步说明(即“!”和“?”)。与链接中的类似问题相比,我提出的问题和我的回答在更基本的层面上进行了解释。
xcode - 没有强制展开属性的打印不会在 Swift 中触发运行时错误
我有下面的代码,它工作正常,但我预计该行print(john.residence!.numberOfRooms)
会崩溃,因为我的numberOfRooms
变量具有nil
值,并且在将其值作为参数传递给print()
. 谁能解释一下为什么这不会触发运行时错误并nil
安全打印?
swift - 可选链接的动态类型与赋值不同
可选链接总是返回一个可选值。
为了反映可以对 nil 值调用可选链接这一事实,可选链接调用的结果始终是可选值,即使您正在查询的属性、方法或下标返回非可选值也是如此。
为什么在操场上的类型不是可选的?
但是下面的代码是
swift - 为什么在执行可选链接时会出错?
A:我是否还没有进行可选链接,并且该行仅在文本具有值时才有效,否则它将优雅地失败?然而它给出了:
可选类型“字符串?”的值 未拆封;你的意思是用'!' 或者 '?'?
B:即使我得到上述编译器错误,我确实解开了它,但它仍然不满意它希望它像?
C!
它不起作用
为什么 C 有效,但 B 无效?没有比 C 行更清洁的方法吗?C线看起来很不吸引人。
swift - 返回不符合方法返回类型,但它仍然有效
下面的代码片段是从官方文档的Optional Chaining章节中简化而来的。
简而言之,Person类有一个可选的Addressaddress
类型的存储属性。通过提供部分/全部 property ,然后可以调用Address类型中的函数buildingNumber并返回一个可选 String 类型的计算建筑物标识符。buildingName
buildingNumber
street
让我们关注return "\(buildingNumber) \(street)"
函数buildingIdentifier()中的行。
问题1:
函数的返回类型是一个可选的字符串,但是函数体的返回是2个可选的字符串,为什么这是允许的?(请看下图是上面代码中##标记的行的打印结果)
问题 2:
我使用了可选的绑定表达式(if let),并且绑定似乎成功了,但是为什么 johnAddressID 没有解包呢?
感谢您的光临和帮助
swift - 带有错误处理的 Swift3 可选链接和解包
我正在尝试使用 guard let 语法来解开一个可选的。使用 guard let 的目的是解开可选项,如果遇到 .none/nil 则中止该过程。
我原以为这意味着一个可选的不能从一个守卫的右边的表达式合法地返回。但是,如果将两个产生可选的表达式组合到 RHS 表达式中,似乎只有一个产生可选的表达式会被评估以用于保护 let 的目的。例如,下面的 parsedResponse 变量将存储一个可选的:
试试?关键字产生一个可选项,条件转换运算符 as? 也是如此。如果你改变这两个运算符中的任何一个来试试!或作为!,您会得到预期的结果。
这是预期的行为吗?我曾假设尝试做这样的事情会产生类似于可选链接的行为,并且当它在 RHS 评估的执行路径上的任何地方遇到 .none/nil 时,守卫 let 将执行“else”代码。然而,情况似乎并非如此。
将一个可选的评估值转换为一个由守卫引入的常量/变量意味着什么?
swift - Swift:带有可选链接和零合并的编译时错误
我对 Swift 中的可选链接和 nil-coalescing 有一个奇怪的问题。谁能解释为什么以下代码无法编译:
但是写的时候
有吗?错误说:
对我来说,它看起来很像编译器错误。