在 swift 3.0 中使用 ? 分配给可选变量运算符返回 nil

2024-01-11

考虑以下代码。

var a:Int?

a? = 10

print(a)

这里变量 a 没有被分配值 10。如果是因为“?”运算符,为什么编译器不显示编译错误?


Try this

var a:Int?

a = 10

print(a)

Well...

? (选修的)表示您的变量可能包含零值,而! (拆包器)指示您的变量在运行时使用(尝试从中获取值)时必须具有内存(或值)。

主要区别在于,当可选值为 nil 时,可选链接会正常失败,而当可选值为 nil 时,强制展开会触发运行时错误nil.

var defaultNil : Int?  // declared variable with default nil value
println(defaultNil) >> nil  

var canBeNil : Int? = 4
println(canBeNil) >> optional(4)

canBeNil = nil
println(canBeNil) >> nil

println(canBeNil!) >> // Here nil optional variable is being unwrapped using ! mark (symbol), that will show runtime error. Because a nil optional is being tried to get value using unwrapper

var canNotBeNil : Int! = 4
print(canNotBeNil) >> 4

var cantBeNil : Int = 4
cantBeNil = nil // can't do this as it's not optional and show a compile time error

这是 Apple 开发者委员会提供的详细基本教程。 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 swift 3.0 中使用 ? 分配给可选变量运算符返回 nil 的相关文章

随机推荐

  • 无论有没有管道,如何在 k 折交叉验证后提取重要特征?

    我想构建一个使用交叉验证的分类器 然后从每个折叠中提取重要的特征 系数 以便我可以查看它们的稳定性 目前我正在使用 cross validate 和管道 我想使用管道 以便我可以在每个折叠内进行功能选择和标准化 我被困在如何从每个折叠中提取
  • 托管 COM 聚合

    据我了解 构建一个聚合现有 COM 对象的 COM 对象意味着在外部对象的 IUnknown QueryInterface 方法中实现重定向逻辑 我的问题是 如果您正在构建的对象是托管的 该怎么做 在托管对象上 IUnknown 没有显式实
  • 使用 ConstructorInfo 调用构造函数的反射

    在如下所示的非常简单的课程中 class Program public Program int a int b int c Console WriteLine a Console WriteLine b Console WriteLine
  • 如何在Python中读取cookie

    我是 python cgi 脚本的新手 我想用Python读取cookie 我尝试了以下代码 from urllib2 import Request build opener HTTPCookieProcessor HTTPHandler
  • Silverlight 中的最大图像 Uri 长度

    有谁知道 Silverlight 中的最大 URL 长度是多少 如果重要的话 版本 4 我知道它是 2048 并且对于 Firefox 来说基本上是无限的 我测试过的两个环境 但是对于长 Uri 来说 图像请求会失败 任何人都知道这个神奇数
  • 有没有办法监控并记录最近启动了哪些应用程序?

    我想知道用户在过去 例如 24 小时内 启动了哪些应用程序 这可能吗 不 不可能 至少在没有大量低级工作的情况下不可能 Android 不会按原样保留应用程序的使用历史记录
  • 将 NSDate 与 [NSDate 日期] 进行比较

    我试图强制用户使用日期选择器选择将来的日期 我显然使用了compare 方法 但是 当我执行以下代码时 即使它与 NSDate date 相同的日期 它也会告诉执行if语句 这是我的代码 if datePicker date compare
  • Google App Engine 版本号?

    App Engine 版本号如何运作 它们只是整数吗 我可以使用浮标吗 我可以重复使用旧版本号吗 从手册中 http code google com appengine docs python config appconfig html R
  • Excel VBA 调试器停止,没有错误或警告

    在尝试测试一些代码时 我遇到了一个我不记得以前遇到过的问题 当我单步执行代码时 它在 ClearContents 行之后停止 没有错误 没有警告 什么也没有 Public Sub CreateCurMth wsCur As Workshee
  • 如何在 jQuery 数组中查找 indexOf 元素?

    我有两个选择器 var allNodes a historyEntry var errorNodes a historyEntry error 我想找到第一个错误节点之前的节点 所以我需要找到第一个错误节点的索引 该怎么做 我尝试使用 in
  • 美丽的汤找不到标签

    我目前正在尝试使用 Python 3 6 中的请求和 BeautifulSoup 模块进行练习 并且遇到了一个问题 我似乎无法在其他问题和答案中找到任何信息 似乎在页面中的某个时刻 Beautifulsoup 停止识别标签和 ID 我正在尝
  • Javascript代码执行顺序奇怪

    我有一段 Javascript Coffeescript 似乎没有按顺序执行 console log list console log list card number if list card number console log MAT
  • 如何替换 pandas 数据框中拼写错误的单词

    我有 2 个熊猫数据框 其中包含拼写正确的单词列表 In df1 Out words 0 apple 1 phone 2 clock 3 table 4 clean 以及一个拼写错误的单词 In df2 Out misspelled 0 a
  • 安装了两个版本的 git,目前使用的是旧版本,如何切换?

    我需要一些帮助 我不久前安装了一个 git 版本 不知道如何 但没有使用自制程序 我刚刚安装了自制软件 我不知道如何使用新的而不是旧的 有想法吗 提前致谢 which a git usr local bin git usr bin git
  • SSIS 中的 OData 源组件未连接

    这是上一个问题的后续问题 SSIS 中的 OData 源组件挂起 https stackoverflow com questions 48026984 odata source component in ssis hanging Setup
  • 在输入按钮上使用 :first-letter 伪元素

    我正在尝试创建一个仅第一个字母带下划线的按 钮 显然我不能使用标签 那么我会用CSS实现它 通过使用伪元素 first letter 它在其他情况下工作得很好 但在按钮中不起作用 还有其他解决方案吗 由于您还没有分享您的代码 我将在这里进行
  • 配置 ant 来运行单元测试。图书馆应该在哪里?类路径应该如何配置?避免 ZipException

    我正在尝试使用 ant 运行我的 junit 测试 测试使用 JUnit 4 测试套件开始 如果我直接从 Eclipse 运行此测试 则测试会顺利完成 但是 如果我从 ant 运行它 那么许多测试都会失败 并一遍又一遍地重复此错误 直到 j
  • 改变 django-filter 默认行为

    这是一个Django 过滤器 https github com alex django filter应用程序特定问题 有没有人尝试过引入条件让过滤器根据条件进行查询 让我举个例子吧 假设我们有一个Product模型 可以根据其过滤name
  • TextFormField 上的可点击图标 - 禁用 TextFormField 聚焦于图标单击(Flutter)

    我需要一个带有 suffixIcon 的文本字段 但是单击该图标后我不需要打开键盘 我怎样才能在没有 suffixIcon 的情况下做到这一点 Container child Stack alignment Alignment center
  • 在 swift 3.0 中使用 ? 分配给可选变量运算符返回 nil

    考虑以下代码 var a Int a 10 print a 这里变量 a 没有被分配值 10 如果是因为 运算符 为什么编译器不显示编译错误 Try this var a Int a 10 print a Well 选修的 表示您的变量可能