Swift学习笔记之---使用if和let处理空变量

2023-10-27

在Swift程序中,结合if和let,可以方便地处理空变量(nullable variable),使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。对于空值,需要在类型声明后添加"?",这样以显式标明该类型可以为空,示例代码如下:

var optionalString: String? = "hello"
optionalString == nil

var optionalName: String? = "John Appleseed"
var gretting = "Hello!"
if let name = optionalName {   //处理空变量
  gretting = "Hello, \(name)"
}

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)。

注意:使用!来获取一个不存在的可选值会导致运行时错误,使用!来强制解析之前,一定要确定可选包含一个非nil的值,示例代码:

import Cocoa
var myString:String?
myString = "Hello, Swift!"

if myString != nil {
   // 强制解析
   print( myString! )
}else{
   print("myString 值为 nil")
}

你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。

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

Swift学习笔记之---使用if和let处理空变量 的相关文章

  • iOS SecItemCopyMatching RSA 公钥格式?

    我正在尝试从已生成的密钥对 两个SecKeyRefs 以便通过线路发送 我所需要的只是一个简单的 modulus exponent 对 它应该正好占用 131 个字节 模数为 128 指数为 3 但是 当我获取关键信息时NSData对象 我
  • 从软件查找服务返回无效结果

    我尝试通过 XCode 组织者提交 iOS 应用程序 但在身份验证后失败 组织者说 从软件查找服务返回的结果无效 我怎么解决这个问题 检查 iTunes Connect 中您的应用程序状态是否为 等待上传 您可以更改状态以按 准备上传二进制
  • 定位精度定义 - iOS

    iOS 上返回的 准确性 或 不确定性 的统计意图是什么 即使是近似值 例如 Android 文档对其返回的精度数字进行了解释 从这个意义上讲 它大约是一个标准差 我们将准确度定义为 68 置信度的半径 换句话说 如果 您以该位置的纬度和经
  • Swift 中的 @autoreleasepool 相当于什么?

    在 Swift 中 我注意到没有 autoreleasepool 构造 尽管 Swift 确实使用了 ARC 在 Swift 中管理自动释放池的正确方法是什么 或者它是否因某种原因被删除 语法如下 autoreleasepool code
  • UILongPressGestureRecognizer 不起作用,但将其替换为 UITapGestureRecognizer 效果很好。为什么?

    我有一个UIImageView with a UILongPressGestureRecognizer无论我如何配置手势识别器 似乎都不会检测到长按手势 但是 如果我把它换成UITapGestureRecognizer that工作得很好
  • iOS - 在 UITabBar 上方获取所需的阴影

    我试图让我的标签栏阴影看起来像这张图片中看到的那样 这样做的最佳方法是什么 我正在使用 Objective C Thanks 您可以使用以下代码为任何 UI 对象提供阴影 tabBar layer shadowOffset CGSize w
  • 如何在 iOS 上更改设备音量 - 而不是音乐音量

    我想更改 iOS iPhone 上的设备音量 我知道我可以使用以下几行更改音乐库的音量 implement at first MediaPlayer framework MPMusicPlayerController musicPlayer
  • 在 iOS Safari 上滚动后锚点失去点击能力

    使用它来获取点击次数 nav li a click function event event preventDefault target this attr href replace goToByScroll target 这是滚动功能 f
  • 解析迁移到 mLabs 和 Heroku 的错误

    我至少一年前将解析数据库迁移到 Mlabs 从那时起我就一直在开发该应用程序 解析仪表板表示我已成功迁移 Mlab 和 Parse 都收到了数据库的更新 然而 在过去一两周内 该应用程序不再经过登录页面 没有调整代码 这是服务器问题 以下是
  • 如何让位置音频在 SceneKit 中工作?

    我在使位置音频在 SceneKit 中工作时遇到问题 从 Xcode 生成的 SceneKit 游戏模板开始 我将以下代码添加到handleTap 方法的末尾 let ship scnView scene rootNode childNod
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • 重新组织链式可观察量

    我有一大块链接的 Rx 可观察量 当通过选择表视图行时会触发这些可观察量table rx modelSelected 我希望能够打破这个逻辑 因为我目前必须在flatMapLatest 因为这是流程的 第一步 感觉不对 我必须在后续执行更多
  • UIView 周围的虚线边框

    如何在周围添加虚线边框UIView 像这样的东西 如果您喜欢子层 还有另一种方法 在您的自定义视图的 init 中 输入以下内容 border 是 ivar border CAShapeLayer layer border strokeCo
  • 如何在 iOS 应用程序中检测所有可用的 Wifi 网络并连接到其中之一

    在我的 iOS 应用程序中 我想检测所有可用的 wifi 网络 然后从列表中选择一个网络并连接到它 目标是不打开应用程序内置的设置来连接 Wi Fi 而是在我的应用程序中完成这一切 首先 这可能吗 如果可能的话 请指出要使用哪些框架和方法
  • admob ios7错误音频框架

    我正在将 admob SDK 当前的 集成到我的上一个应用程序 IOS7 Xcode5 中 并且出现了一个新错误 在新项目上也是如此 我想我错过了一些东西 但我多次重新启动该过程 但错误仍然存 在 Undefined symbols for
  • 在后台继续下载

    我正在创建一个应用程序 其中我从服务器下载一些数据 在后台运行时 我希望连接继续运行 以便可以下载数据 我知道有方法应用程序委托 void applicationDidEnterBackground UIApplication applic
  • 如何将NSTextView的格式化内容转换为字符串

    我需要将 NSTextView 的内容从 Mac 应用程序传输到 iOS 应用程序 我使用 XML 作为传输文件格式 所以我需要将 NSTextView 的内容 文本 字体 颜色等 保存为字符串 有什么办法可以做到这一点吗 一种方法是存档
  • 如何在没有 MFMessageComposeViewController 的情况下发送和接收短信?

    我想发送和接收短信而不显示MFMessageViewController从我的申请中 有人能告诉我这怎么可能吗 不可能 除非您使用第 3 方 api 发送 接收短信
  • iOS 11 中的密码自动填充快速输入栏

    iOS 11 中引入了一项新功能 应用程序密码自动填充 此功能允许用户直接从键盘快速输入栏使用其应用程序中保存的密码 https techcrunch com 2017 06 08 ios 11s new password autofill
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat

随机推荐

  • 如何在Linux中设置静态IP和配置网络

    如何在Linux中设置静态IP和配置网络 文章目录 如何在Linux中设置静态IP和配置网络 1 使用ifconfig的一次性修改 1 修改静态ip 2 修改网关 2 修改配置文件的永久性修改 1 Ubuntu相关系统 2 CentOS相关
  • C#+Sql Server开发一个简易的学生管理系统

    效果图 目前是这样 如果想做成这样 加一个DataGridView进行显示即可 使用VS2017新建一个控制台应用程序 连接数据库 即可对数据库进行增删改查 更多的功能还没有写 不适合直接拿去做课设 不过基本架子都有了 更多复杂的功能写sq
  • Qt之回调函数:6 在QT中使用回调函数替代信号槽

    文章目录 一 前言 二 如何使用CALLBACK工作 程序及解释 小方块 主窗口 MainWindow ui 总结 在QT中使用回调函数替代信号槽 前面讲了一堆 就是为了实现看到的这篇文章中的例子 由于对回调不懂 前前后后翻阅参考了一大堆优
  • 阻止a标签默认行为的几种简单方法

    1 a href Click Me a onclick方法负责执行js函数 而void是一个操作符 void 0 返回undefined 地址不发生跳转 a href Click Me a 和void 0 一样 都返回 undefined
  • 07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

    0 前言 一般我们自己创建的一些python项目 我们都需要创建虚拟环境 其中会下载很多包 也叫做依赖 但是我们在给他人分享我们的项目时 不能把虚拟环境打包发送给别人 因为每个人电脑系统不同 我们可以把依赖导出为依赖清单 然后别人有了我们的
  • ext显示服务器文件系统,centos – 如何找出ext3文件系统损坏的原因?

    我们有一个运行CentOS 5 8虚拟机的VMware vSphere 5环境 在过去两周内 我们遇到了五个虚拟机事件 这些虚拟机的文件系统已损坏 需要修复fsck 以下是我们在日志中看到的内容 Nov 14 14 39 28 hostna
  • Ubuntu卸载软件:3种卸载方式

    1 使用Synaptic软件包管理器进行卸载 打开软件包管理器 Ubuntu自带了一个GUI Graphical User Interface 图形化用户界面 软件包管理器 它可 以让你在一个可视化窗口中卸载程序 如果你不习惯使用命令行 这
  • spring报错 XXX will not be managed by Spring

    如上提醒表示当前不是Spring管理着呢 是你的数据库插件Mybatis或者MybatisPlus给你管理呢 所以Spring给你温馨提醒了一下而已 又没有报错 解决的办法是在数据查找的方法上添加 Transactional 然后就会变成s
  • error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 找到一个或多个多重定义的符号

    今天在搞一个动态链接库的时候 出现了这样的错误 1 gt mfcs100ud lib dllmodul obj error LNK2005 DllMain 12 已经在 MSVCRTD lib dllmain obj 中定义 1 gt E
  • HTTPS之TLS1.2连接详解

    本文说一下HTTPS的会话连接详情 HTTPS连接除了正常的TCP三次连接 还引入了TLS连接 本文说的是基于 1 三次握手连接 首先通过三次握手连接来建立连接 接下来就是TLS连接 2 TLS第一次握手 ClientHello 客户端首先
  • Linux Kibana :nohup: 忽略输入并把输出追加到"nohup.out

    nohup 忽略输入并把输出追加到 nohup out 不要使用下面的命令启动 nohup kibana 改用 nohup kibana gt dev null 2 gt 1
  • 后台的BigDecimal字段,传到前端丢失精度问题

    后台的BigDecimal字段 传到前端丢失精度问题 后台的BigDecimal类型的字段 传到前端丢失精度 相关字段 private BigDecimal acreage 例如 该字段的值为 100 00 到前端就变成了 100 前端要求
  • HCNP路由交换学习指南--- 路由的基本概念

    文章目录 HCNP路由交换学习指南 路由的基本概念 交换机路由表学习 路由信息来源 路由的优先级 路由的度量值 HCNP路由交换学习指南 路由的基本概念 交换机路由表学习 路由是一种逐跳 HopByHop 的行为 也就是说 数据从源被发出直
  • 量化投资策略回测框架(一):胜率的估算

    上次简单介绍了回测之前的一些准备工作 这里 将进一步介绍如何对一个投资策略就行完整的回测 杂言 人啊 还是要做自己喜欢做的事情 勇于尝试 是非常好的 当感觉不合适的时候 要尽早跳出 年轻人 还是不要太安逸 所以从财富跳到了私募 事情也是自己
  • JWT解析库-nimbus-jose-jwt

    07 JWT解析库 nimbus jose jwt JWT解析库 nimbus jose jwt 是最受欢迎的JWT开源库 基于Apache2 0开源协议 支持所有标准的签名JWS和加密JWE算法 1 JWT JWS JWE是什么 1 1
  • Mac使用Appium连接真机与appium-inspector配置

    文章目录 1 配置Java SDK与Android SDK 2 连接真机 3 配置Appium与appium inspector安装 4 配置appium inspector 5 尝试连接 6 报错解决 gt No route found
  • 定时器控制数码管扫描显示

    功能 定时器控制两位数码管扫描显示 器件 STC12C5A32S2 两个数码管 include config h define uint unsigned int define uchar unsigned char define ulon
  • 一步步学习k8s(三)

    一步步学习k8s 三 将apollo交付到K8S中 apollp是携程公司开源的软件 apollp官网 https github com ctripcorp apollo 安装数据库 Mariadb 版本要高于10 1 对应mysql版本要
  • TrafficMonitor之Windows10监控小工具

    TrafficMonitor之Windows10监控小工具 安装 基本设置 软件下载地址 https gitee com xiaoha1234 soft ware blob master TrafficMonitor zip 1 基本设置
  • Swift学习笔记之---使用if和let处理空变量

    在Swift程序中 结合if和let 可以方便地处理空变量 nullable variable 使用可选绑定 optional binding 来判断可选类型是否包含值 如果包含就把值赋给一个临时常量或者变量 可选绑定可以用在if和whil