在这种情况下,为什么我必须显式解开字符串?

2024-02-06

我有一根绳子var oneString: String!然后在一个方法中,当我想将一个字符串连接到oneString我必须这样做:

oneString! += anyString

如果我不添加!我收到一个错误'String!' is not identical to 'CGFloat'

如果我用以下方式初始化我的字符串var oneString = ""我没有这个问题。为什么?为什么我需要拆开包装oneString而我在声明时明确表示它不会为零?


为什么我需要拆开包装oneString而我在声明时明确表示它不会为零?

你误解了什么var oneString: String!方法。这并不意味着oneString不会为零。如果您将类型声明为var oneString: String, then您正在声明一个不能为零的类型。

方式String!是一个“隐式展开的可选”。也就是说,它是可选的,就像String?,但是假装是非可选的有时。主要是为了阅读它——你不必显式地打开它来获取值。缺点是,如果它永远为零(而且完全可以如此),您的代码将陷入困境并中止。

但这种假装不可选择的做法也只能到此为止。你不能通过String!到一个函数inout当该参数不是可选的时。因此你的问题。

安东的答案对于它不起作用的原因是完全正确的,他建议的运算符重载将使您的代码编译。但这不是正确的解决方案 - 您应该避免使用隐式展开的选项,因为它们是弹簧加载的死亡陷阱,并且仅在特定情况下使用(最常见的是 Cocoa UI 控件)。 1,000 次中有 999 次你选择常规可选或非可选会更好

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

在这种情况下,为什么我必须显式解开字符串? 的相关文章

随机推荐

  • 高度大于屏幕高度的 Flutter 可滚动堆栈

    我有一个小部件层次结构 其中SingleChildScrollView是父母有Stack作为孩子 Stack有两个孩子 如果第二个孩子超出屏幕高度 其高度就会被剪裁 根据文档 堆栈占用的大小根据Non Positioned孩子 所以这意味着
  • 如何在 Visual Studio Express 中查看异常详细信息?

    How do you view exception details such as messages and stack traces in VS Express 2012 I am using Visual Studio Express
  • 对象的深拷贝

    我可以请一些帮助来执行对象的深层复制吗 这是我的代码 Option Explicit On Option Strict On
  • 尝试使用 pdfminer.6 提取文本时如何修复“UnicodeDecodeError”?

    使用 pdfminer 时出现 UnicodeEncodeError 来自 git 的最新版本 https github com pdfminer pdfminer six commit d79612c455a5de0526d5bc3244
  • MS Access 下拉列表/组合框

    这可能应该很简单 但我的 Google Fu 尚未找到答案 我只想在 Access 中创建一个下拉列表 以便在选择时我可以根据选择的值执行某些操作 例如 我有一个人员列表 我想填充组合框 以便他们的名字出现在列表中 但 值 设置为他们的 I
  • 升压信号连接管理

    过去两个晚上我一直在绞尽脑汁试图解决这个问题 但没有任何积极的结果 在升压信号中 每次我想要将一个类的成员函数连接到另一个类的信号时 如果我想稍后断开连接 我必须将结果连接保存在变量中 如果稍后 我想将相同的成员函数连接到其他一些类信号 成
  • java.security.egd 选项的用途是什么?

    在我正在开发的一个项目中 应用程序是使用类似于以下的命令启动的 java Djava security egd file dev urandom jar app jar 我从未见过java security egd之前的选项 搜索了一下 它
  • 使用 Julia 进行数据库抽象

    许多语言提供数据库抽象来将数据 对象 保存到关系数据库 通常通过对象关系映射 ORM 我知道 Julia 不是一种 传统 的面向对象语言 参见朱莉娅 是否面向对象编程 https stackoverflow com questions 33
  • 如何绘制带有半径和起始角度和终止角度的圆弧

    如果我的 Canvas 元素的 DataContext 中有以下四个属性 Point Center double Radius double StartAngle double EndAngle 我可以在没有任何额外代码的情况下绘制弧线吗
  • 高度页面-Div结构

    我试图让我的页面占据 100 的屏幕 并带有页脚 它需要始终位于页面底部 当页面大小调整时 div 应该展开 并具有正确的背景颜色 我目前遇到的错误是 页脚停留在屏幕底部而不是页面底部 div 菜单 大于 div 内容 div 无法正确调整
  • 使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?

    我想检索 select 语句中日期和月份值前面没有前导零的日期 如果我执行以下查询 select to char sysdate dd mm yyyy from dual 我将得到 21 03 2014 结果 此外 如果今天是 2014 年
  • 在哪里可以找到 Linux 设备驱动程序第三版的示例源文件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在努力通过Linux 设备驱动程序 第三版 http lwn net Kernel LDD3 虽然这
  • 将 html5 应用程序作为 Windows 可执行文件运行

    我在网上到处寻找这类事情 发现了很多类似的问题和文章 但没有一个回答这个问题 我有一个大型 HTML 5 应用程序 我想将其作为 Windows 上的可执行文件作为全屏本机应用程序运行 我可以想象你可以稍后在 c 中通过 webkit 来完
  • Leaflet:在 GeoJSON 层中使用动态过滤器

    我已经非常接近了 但我很难理解如何将多个用户提交的表单复选框值传递到 Leaflet geoJSON 过滤器函数并仅显示这些点 到目前为止我所拥有的 map filters on submit function e e preventDef
  • 如何使用 numba 优化 numpy.packbits?

    我正在努力优化numpy packbits import numpy as np from numba import njit prange njit parallel True def numba pack arr div su for
  • 如何在任何给定时间检查池中活动 sqlalchemy 连接的数量?

    我遇到过这样的情况 由于高流量负载 sqlalchemy 会不时耗尽活动连接 我想运行一些测试来验证和优化每个用例的池参数 但是 我找不到轮询活动连接计数的直接方法 当前设置如下 args mapping pool size 10 max
  • py2app 在构建过程中获取包的 .git 子目录

    我们在我们的工厂广泛使用 py2app 来生成自包含的 app 包 以便轻松进行内部部署 而不会出现依赖性问题 我最近注意到的一件事 但不知道它是如何开始的 是在构建 app 时 py2app 开始包含我们主库的 git 目录 例如 com
  • 加速(缓慢的)巨大的 WordPress 数据库

    我正在测试一个新项目 其中涉及使用 WordPress 安装 该安装有超过 150 万个帖子 通常帖子内容 标题只有一两行 所以很短 我已经有了强烈推荐的 W3 cache 插件 它很有帮助 但是当你第一次登陆一个页面时 需要 40 60
  • 检查菜谱中是否包含某种成分 - MYSQL

    嘿大家 我在有效运行查询 PHP 组合时遇到了一些麻烦 我似乎只是在 php ini 的内部循环中循环了太多结果集 我确信有一种更有效的方法可以做到这一点 非常感谢任何帮助 我有一张桌子 里面有 3500 个食谱 recipe rid re
  • 在这种情况下,为什么我必须显式解开字符串?

    我有一根绳子var oneString String 然后在一个方法中 当我想将一个字符串连接到oneString我必须这样做 oneString anyString 如果我不添加 我收到一个错误 String is not identic