前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift入门:可选链

Swift入门:可选链

作者头像
韦弦zhy
发布2020-03-19 20:47:49
6260
发布2020-03-19 20:47:49
举报
文章被收录于专栏:韦弦的偶尔分享
\color{red}{\Huge \mathtt{SWIFT}}
\color{red}{\Huge \mathtt{SWIFT}}
\color{orange}{\Large \mathbf{可选链}}
\color{orange}{\Large \mathbf{可选链}}
\underline{\color{#3399CC}{\large \mathit{Optional \ Chaining}}}
\underline{\color{#3399CC}{\large \mathit{Optional \ Chaining}}}

有时使用可选类型会感到有些笨拙,并且所有解包和检查工作都变得如此繁重,以至于您可能会想起一些感叹号来强制展开内容,以便继续工作。但是请注意:如果您强制拆开没有值的可选选项,则代码将崩溃。

Swift有两种技术可以帮助您减少代码的复杂度。第一个称为可选链,它使您仅在可选具有值时才运行代码。将以下代码放入您的 playground 以开始我们的工作:

代码语言:javascript
复制
func albumReleased(year: Int) -> String? {
    switch year {
    case 2006: return "Taylor Swift"
    case 2008: return "Fearless"
    case 2010: return "Speak Now"
    case 2012: return "Red"
    case 2014: return "1989"
    default: return nil
    }
}

let album = albumReleased(year: 2006)
print("The album is \(album)")

这将在结果窗口输出 "The album is Optional("Taylor Swift")"

如果我们想将AlbumReleased()的返回值转换为大写字母(即“ TAYLOR SWIFT”而不是“ Taylor Swift”),则可以调用该字符串的uppercased()方法。例如:

代码语言:javascript
复制
let str = "Hello world"
print(str.uppercased())

问题是,albumReleased()返回一个可选字符串:它可能返回一个字符串,或者可能什么都不返回。因此,我们真正的意思是,“如果返回字符串,则将其变为大写,否则不执行任何操作。”这就是可选链接出现的地方,因为它恰好提供了该行为。

尝试将最后两行代码更改为这样:

代码语言:javascript
复制
let album = albumReleased(year: 2006)?.uppercased()
print("The album is \(album)")

请注意,那里有一个问号,这是可选的链接:问号之后的所有内容仅在问号之前的所有内容都具有值时才运行。这不会影响album的基础数据类型,因为该行代码现在将返回nil或将返回大写相册名称——它仍然是可选字符串。

您的可选链可以根据您的需要而定,例如:

代码语言:javascript
复制
let album = albumReleased(year: 2006)?.someOptionalValue?.someOtherOptionalValue?.whatever

Swift将从左至右检查它们,直到找到nil,然后停止。

空合运算符 Nil Coalescing Operator : ??

这个简单的Swift功能使您的代码更简单,更安全,但名字如此夸张,以至于很多人对此感到恐惧。真可惜,因为如果您花时间弄清楚空合运算符,将使您的生活更轻松!

它的作用是让您说“如果可以,请使用值A,但如果值A为nil,则请使用值B。”就是这样。这对于可选项特别有用,因为它可以有效地阻止它们成为可选项,因为您提供了非可选值B。因此,如果A是可选项并且具有值,则它会被使用(我们有一个值)。没有值,B被使用(所以我们仍然有一个值)。无论哪种方式,我们绝对都有值。

为了给您一个真实的上下文,请尝试在 playground 上使用以下代码:

代码语言:javascript
复制
let album = albumReleased(year: 2006) ?? "unknown"
print("The album is \(album)")

这个双重问号是空合运算符,在这种情况下,它的意思是“如果albumReleased()返回一个值,然后将其放入album变量,但是如果albumReleased()返回nil,则使用'unknown'。

如果现在在结果窗口中查看,您会看到其中印有"The album is Taylor Swift''的标签——没有更多的可选选项。这是因为Swift现在可以确定它会返回真实值,或者是因为该函数返回了一个值,或者是因为您提供的是“ unknown”。反过来,这意味着您不需要拆开任何可选值或面临发生崩溃的风险——确保可以使用确实存在的数据,这使您的代码更安全,更容易使用。

本文来自Hacking with Swift给swift初学者的入门课程Swift for Complete Beginners Optional chaining

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 空合运算符 Nil Coalescing Operator : ??
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档