/* 下面是介绍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)的更多相关文章

  1. 浅谈 Swift 中的 Optionals

    input[type="date"].form-control,.input-group-sm>input[type="date"].input-grou ...

  2. Swift中可选类型(Optional)的用法 以及? 和 ! 的区别 (转载博客,知识分享)

    本文转载自:代码手工艺人的博客,原文名称:Swift之 ? 和 ! Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之 ...

  3. Swift Optional Chaining

    Optional Chaining介绍 关于「optional chaining」,<The Swift Programming Language>是这么描述的: Optional cha ...

  4. swift中为什么要创造出可选型?

    (1)因为nil这个东西,swift中没有就是没有.  Int? 叫 整型可选型,如果不提前声明,直接赋值变量 nil会报错 . 可以将Int赋值给Int?   ,但是不能将Int?赋值给Int . ...

  5. [翻译]理解Swift中的Optional

    原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...

  6. Swift中的Optional类型 (可选类型)与强制解包 ? !

    我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是 ...

  7. 重新认识Swift中的可选型(Swift2.1)

    //: Playground - noun: a place where people can play import UIKit /* Swift中nil代表是是另外一种类型, 而不像OC那样, 任 ...

  8. swift中,Optional、?与!之间的关系

    swift中,Optional.?与!之间的关系 Optional <ClassName> 与 ClassName? 等价 对 ClassName! 强制取值会导致崩溃(如果对象为nil时 ...

  9. TypeScript 中 Optional Chaining 和 Nullish Coalescing

    Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz();   这里的 ...

随机推荐

  1. 快速排序(Quick Sort)的C语言实现

    快速排序(Quick Sort)的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序,具体步骤 ...

  2. net Core 使用MyCat分布式数据库,实现读写分离

    net Core 使用MyCat分布式数据库,实现读写分离 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题, ...

  3. Scut 进阶:EntityChangeEvent

    EntityChangeEvent 最重要的两个变量:ItemEvent.ChildrenEvent. ItemEvent 的功能流转: 从整个跳转图可以看出,这个功能的作用是 -- 自动将数据修改保 ...

  4. iOS6 自动布局 入门–Auto Layout(转)

    iOS6 自动布局 入门–Auto Layout(转) 标签: 杂谈   目前为止,即使你的界面设计是在合理的复杂度内,你也必须要为之写许多代码来适应变化的布局.现在我相信你会很高兴听到这种情况将不会 ...

  5. perl 分析mysql binlog

    binlog 日志格式: use `zjzc`/*!*/; SET TIMESTAMP=1476326343/*!*/; UPDATE `ProductAccess` pa SET pa.access ...

  6. 【HDOJ】 七百题留念

  7. Delphi TdxBarmanager

    在 Form 上放一个 BarManager鼠标右键它,可以建立一个 MainToolBar,鼠标右键MainToolBar,建什么随便你选.只不过,最后设置一下 BarManager 的 Image ...

  8. C# 中dataTable中的数据批量增加至数据表中

    /// <summary> /// 批量添加 /// </summary> /// <param name="dt"></param> ...

  9. cf591B Rebranding

    B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  10. Domain Shutdown Error(JBAS010850)

    In a manged domain, the shutdown operation is not located in the root resource (i.e. address []). A ...