Swift中可选型的Optional Chaining 和 Nil-Coalesce(Swift2.1)
/* 下面是介绍Optional Chaining 和 Nil-Coalesce */ // Optional Chaining (可选链)
if let errorMessage = errorMessage {
errorMessage.uppercaseString
}
// 这种写法完全等价于上面的写法, 当errorMessage有的时候, 才会去执行"?"后面的代码, 否则就终止与"?"
// 并且会返回nil
errorMessage?.uppercaseString
// 这种写法也可以, 但和上面的写法表示的意思完全不一样, 表示解包后就是一个字符串, 然后执行"!"后的代码
// 一样存在风险(当errorMessage为nil时, 就会报错)
errorMessage!.uppercaseString // 另外一个可选值调用方法或者访问属性返回的是可选值, 可以使用可选链来达到精简代码的目的, 例如
errorMessage?.stringByRemovingPercentEncoding?.stringByRemovingPercentEncoding // 这里的newErrorMessage并没有显式声明为可选型变量, 但由于errorMessage?.uppercaseString可能返回nil
// Swift就认为newErrorMessage必须是一个可选型变量
let newErrorMessage = errorMessage?.capitalizedString // 所以也可以这样进行解包操作
if let newErrorMessage = errorMessage?.capitalizedString {
print(newErrorMessage)
} // Nil-Coalesce
// 方式1: 由于message一开始并没有赋值, 在赋值之前对其进行使用, 会出现错误, 就有了方式2
let message: String
if let newErrorMessage = newErrorMessage {
message = newErrorMessage
} else {
message = "No Error"
}
print(message) // 方式2: 三目运算
let message2: String = newErrorMessage != nil ? newErrorMessage! : "No Error" // 方式3: 更简洁 (表示, 如果newErrorMessage的值为nil, 就赋值为??后面的值, 否则就把newErrorMessage解包后的值进行赋值)
let message3 = newErrorMessage ?? "No Error"
Swift中可选型的Optional Chaining 和 Nil-Coalesce(Swift2.1)的更多相关文章
- 浅谈 Swift 中的 Optionals
input[type="date"].form-control,.input-group-sm>input[type="date"].input-grou ...
- Swift中可选类型(Optional)的用法 以及? 和 ! 的区别 (转载博客,知识分享)
本文转载自:代码手工艺人的博客,原文名称:Swift之 ? 和 ! Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之 ...
- Swift Optional Chaining
Optional Chaining介绍 关于「optional chaining」,<The Swift Programming Language>是这么描述的: Optional cha ...
- swift中为什么要创造出可选型?
(1)因为nil这个东西,swift中没有就是没有. Int? 叫 整型可选型,如果不提前声明,直接赋值变量 nil会报错 . 可以将Int赋值给Int? ,但是不能将Int?赋值给Int . ...
- [翻译]理解Swift中的Optional
原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...
- Swift中的Optional类型 (可选类型)与强制解包 ? !
我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是 ...
- 重新认识Swift中的可选型(Swift2.1)
//: Playground - noun: a place where people can play import UIKit /* Swift中nil代表是是另外一种类型, 而不像OC那样, 任 ...
- swift中,Optional、?与!之间的关系
swift中,Optional.?与!之间的关系 Optional <ClassName> 与 ClassName? 等价 对 ClassName! 强制取值会导致崩溃(如果对象为nil时 ...
- TypeScript 中 Optional Chaining 和 Nullish Coalescing
Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz(); 这里的 ...
随机推荐
- 快速排序(Quick Sort)的C语言实现
快速排序(Quick Sort)的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序,具体步骤 ...
- net Core 使用MyCat分布式数据库,实现读写分离
net Core 使用MyCat分布式数据库,实现读写分离 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题, ...
- Scut 进阶:EntityChangeEvent
EntityChangeEvent 最重要的两个变量:ItemEvent.ChildrenEvent. ItemEvent 的功能流转: 从整个跳转图可以看出,这个功能的作用是 -- 自动将数据修改保 ...
- iOS6 自动布局 入门–Auto Layout(转)
iOS6 自动布局 入门–Auto Layout(转) 标签: 杂谈 目前为止,即使你的界面设计是在合理的复杂度内,你也必须要为之写许多代码来适应变化的布局.现在我相信你会很高兴听到这种情况将不会 ...
- perl 分析mysql binlog
binlog 日志格式: use `zjzc`/*!*/; SET TIMESTAMP=1476326343/*!*/; UPDATE `ProductAccess` pa SET pa.access ...
- 【HDOJ】 七百题留念
- Delphi TdxBarmanager
在 Form 上放一个 BarManager鼠标右键它,可以建立一个 MainToolBar,鼠标右键MainToolBar,建什么随便你选.只不过,最后设置一下 BarManager 的 Image ...
- C# 中dataTable中的数据批量增加至数据表中
/// <summary> /// 批量添加 /// </summary> /// <param name="dt"></param> ...
- cf591B Rebranding
B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Domain Shutdown Error(JBAS010850)
In a manged domain, the shutdown operation is not located in the root resource (i.e. address []). A ...