当前位置: 首页 > 面试题库 >

带有“?”的快速可变装饰 (问号)和“!” (感叹号)

司寇望
2023-03-14
问题内容

我了解在Swift中所有变量都必须设置一个值,并且通过使用可选参数,我们可以将变量设置为nil初始值。

我不明白的是,用a设置变量的作用!是什么,因为我的印象是这会“取消包装”来自可选值的值。我认为通过这样做,您可以保证在该变量中有一个要解包的值,这就是在IBActions上使用它的原因。

简而言之,当您执行以下操作时,要初始化的变量是什么:

var aShape : CAShapeLayer!

为何/何时执行此操作?


问题答案:

在类型声明中,!类似于?。两者都是可选的,但是!是“
隐式展开的”可选的,这意味着您不必解包即可访问值(但它仍然可以为nil)。

这基本上是我们在Objective-C中已经拥有的行为。值 可以
为nil,您必须检查该值,但是您也可以直接访问该值,就好像它不是可选值一样(重要的区别是,如果不检查nil,您将得到一个运行时错误)

// Cannot be nil
var x: Int = 1

// The type here is not "Int", it's "Optional Int"
var y: Int? = 2

// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3

用法:

// you can add x and z
x + z == 4

// ...but not x and y, because y needs to be unwrapped
x + y // error

// to add x and y you need to do:
x + y!

// but you *should* do this:
if let y_val = y {
    x + y_val
}


 类似资料:
  • 问题内容: 查看数据库中的V $ SQL,我刚发现一个奇怪的查询,看起来像: 有人知道语法@!的含义吗? 我以前从未在Oracle中见过类似的东西 谢谢 问题答案: 这是源自远程数据库的查询。使用@DB_NAME语法在远程数据库上的查询中引用了您在V $ SQL中看到此查询的数据库 远程数据库已将查询推送到您的数据库中以便执行,但是要回答该查询,您的数据库需要从远程数据库中拉回一些信息。这是@!进

  • 问题内容: 我有一个简单的Python脚本,可以接收用户名和密码作为参数,但是我的密码包含两个感叹号。当我像这样调用脚本时 我之前输入的命令将替换感叹号: 我可以使用反斜杠()避开感叹号,但密码会更改。 是否有解决方案,如何在不更改密码的情况下转义感叹号? 问题答案: 您应该能够简单地在外壳中用单引号引起来。

  • 问题内容: 我正在阅读此查询,遇到了我不明白的那一行 FETT列表是一个表 FETT搜索是FETT列表中的一列 有人可以解释感叹号的含义吗? 谢谢 问题答案: 通常,您会在MS Access代码中看到此信息(对于感叹号,这是SQL Server的句点)。您可以通过table.column来引用列,或者如果为表赋予别名,则可以通过alias.column来引用。如果要在使用联接时特定于表,则可以执行

  • 在Kotlin中,单个感叹号意味着什么?我见过几次,特别是在使用Java API时。但我在文档中和StackOverflow上都找不到它。

  • 问题内容: 我正在尝试使用NSLocalizedString本地化我的应用程序。当我导入XLIFF文件时,大多数工作都像一个超级按钮,但是有些却没有,有些字符串没有本地化。我注意到问题出在NSLocalizedString中,其中包含一些变量,例如: 要么 也许这不是这类东西的正确语法。有人可以向我解释如何迅速做到这一点?非常感谢你。 问题答案: 您可以在中使用format参数,因此您的示例如下所

  • 问题内容: !function () {}(); 问题答案: JavaScript语法101。这是一个 函数声明 : 请注意,这里没有分号:这只是一个函数 声明 。您将需要调用来实际运行该功能。 现在,当我们添加看似无害的感叹号时:它将变为 表达式 。现在它是一个 函数表达式 。 该单独不会调用函数,当然,但我们现在可以把结尾:它的优先级高于并立即调用函数。 因此,作者正在做的是为每个函数表达式保