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处理空变量 的相关文章

  • GM 发布 Xcode 6 编译

    我刚刚下载了 Xcode 6 的 GM 版本 但无法编译并出现以下错误 Command Applications Xcode app Contents Developer Toolchains XcodeDefault xctoolchai
  • 错误域=NSURLErrorDomain代码=-1017“该操作无法

    我刚刚开始 ios 开发 我正在尝试与我的 api 交换数据 当我执行 POST 请求时 一切正常 但当我尝试执行 GET 请求时 出现以下错误 错误域 NSURLErrorDomain代码 1017 该操作无法 完全的 NSURLErro
  • 在 Flurry 中记录比错误 ID 更多信息的方法?

    我目前使用 iOS 版 Flurry 5 4 0 我担心在方法方面是否能够记录更多信息 而不仅仅是错误 ID void logError NSString errorID message NSString message error NSE
  • 在哪里实现 Swift 协议?

    在 Swift 中实现协议一致性时 我有两个选择 具有相同的最终结果 在类中实现协议 也就是说 在类定义的顶部声明一致性 并将实现放在类体内 或者 在扩展中实现协议 也就是说 完全在类之外编写符合协议的代码 这是一个例子 public cl
  • 如何使用 WKWebView 正确实施身份验证质询?

    我正在构建一个网络浏览器 但在网络方面我真的是新手 我想测试下面的代码示例 但我没有现实生活中的示例可以使用 void webView WKWebView webView didReceiveAuthenticationChallenge
  • Cocos2D复杂动画[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Cocos2D 将我的游戏从 Flash 移植到 iOS 我现在有一个工作版本 我很高兴我
  • 如何获取核心数据中现有实体(表)的列表

    如何获取核心数据中特定模式 托管对象模型 的现有实体 表 列表 我刚刚开始实施核心数据概念并坚持这些要点 就像是 SELECT COUNT FROM information schema tables WHERE table schema
  • 在其他数组中使用 ForEach 的索引

    为什么我不能使用 FromEach 的索引作为其他数组的索引 这个索引是Int 那么有什么问题呢 var word String return slova selector var symbols Array
  • Xcode 6 仪器冻结

    在 Xcode 6 Instruments 中分析我的 iOS 8 应用程序将运行该应用程序约 5 秒 然后冻结 此后探查器仍将运行 但应用程序已冻结且无法使用 发生在设备和模拟器上 无论我使用哪个分析器 计时器 泄漏等 从调试器或临时构建
  • 只有根级导航目的地对于具有同质路径的导航堆栈有效

    我正在尝试整合NavigationStack在我的 SwiftUI 应用程序中 我有四个看法 CealUIApp OnBoardingView UserTypeView and RegisterView 我想从OnBoardingView
  • 使用 AVMutableVideoCompositionLayerInstruction 旋转视频

    我正在 iPhone 4 上使用前置摄像头拍摄视频 并将视频与其他一些媒体资源结合起来 我希望该视频为纵向 所有视频的默认方向都是横向 在某些情况下 您必须手动管理 我正在使用 AVFoundation 特别是 AVAssetExportS
  • 在 iOS 上的 OpenGL ES 2.0 中创建 16 位亮度纹理

    我的文件中有 16 位数据 我正在尝试将其加载到 iOS 上的 OpenGL 亮度纹理中 如果我手动将 16 位值重新调整为 8 位 我可以按如下方式加载和显示数据 glTexImage2D GL TEXTURE 2D 0 GL LUMIN
  • 在视图控制器中获取 applicationDidFinishLaunching 调用。解析尚未初始化

    我正在尝试从 Parse 加载数据Initial View 控制器 问题是 Parse 在我的中初始化AppDelegate s didFinishLaunching所以我需要等到它被调用后再尝试从 Parse 加载数据 在我的视图控制器中
  • TestFlight 提供反馈按钮

    我正在使用 iOS 8 的最新 testflight 版本 我将自己添加为内部测试人员 现在当我使用 testflight 打开应用程序时 我找不到反馈按钮 如果有人有任何线索 请告诉我 您在 Testflight 应用程序中提供反馈 打开
  • 在 Swift 中对约束进行动画处理

    我有一个UITextField我想在点击时放大它的宽度 我设置了约束 并确保左侧约束的优先级低于我尝试在右侧设置动画的约束 这是我尝试使用的代码 move the input box UIView animateWithDuration 1
  • 从xcode上触摸屏的坐标获取ImageView的像素数据?

    单击视图并从视图内的图像获取正确的像素数据似乎存在问题 func handleTap gestureRecognizer UIGestureRecognizer print You tapped at gestureRecognizer l
  • Swift 相当于 Objective-C FourCharCode 单引号文字(例如 'TEXT')

    我正在尝试在 Swift 中复制一些 Objective C cocoa 一切都很好 直到我遇到以下情况 Set a new type and creator unsigned long type TEXT unsigned long cr
  • scntool:无法转换文件,失败原因:*** -[__NSSingleObjectArrayI objectAtIndex:]:索引 1 超出范围

    我正在 Xcode 9 3 下开发一个基于 iOS 11 3 SceneKit 的项目 我有几个 dae 文件格式的 3D 模型 每当我构建项目时 其中一个模型不会被复制到最终的 iOS 包中 深入研究错误 我在复制捆绑资源构建阶段收到以下
  • 如何正确创建迦太基 cartfile?

    我正在研究购物车文件 迫不及待地想 简单地创建一个购物车文件 就像所有说明所说的那样 只是 如何 简单地 创建一个 Cartfile 我创建了一个纯文本文档 将其命名为 cartfile 并在其中复制了一些依赖项 Ran carthage
  • Swift 运行时库与 Swift 标准库

    In this 关于如何使用 CocoaPods 的教程 https www raywenderlich com 97014 use cocoapods with swift我无法理解以下段落 与 Objective C 不同 标准 Swi

随机推荐

  • 如何在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