自动引用计数器(Automatic Reference Counting)
自动引用计数器的工作机制
自动引用计数器实践
类实例之间的循环强引用
解决实例之间的循环强引用
弱引用
无主引用
无主引用以及隐式解析可选属性
闭包引起的循环强引用
解决闭包引起的循环强引用
定义捕获列表
弱引用和无主引用
可选链式调用(Optional Chaining)
使用可选链式调用代替强制展开
为可选链式调用定义模型类
通过可选链式调用访问属性
通过可选链式调用调用方法
连接多层可选链式调用
在方法的可选返回值上进行可选链式调用
控制流(Control Flow)<span style="color: rgb(34, 34, 34); font-family: SimSun; font-size: 13pt;"> </span>
For-In循环
While循环
while
repeat-while
条件语句
If
Switch
不存在隐式贯穿
区间匹配
值绑定
where
复合匹配
控制转移语句
continue
break
循环中的break
switch语句中的break
fallthrough贯穿
return
throw
带标签的语句
提前退出guard
<ol class="code-lines" style="background-color: transparent; border: 0px; font-size: 14px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline: 0px; padding: 0px; vertical-align: baseline; counter-reset: li 0; line-height: 1.6em; list-style: none; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif;"><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;"><span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">guard</span> <span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">let</span> <span class="vc" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(63, 110, 116);">name</span> = <span class="vc" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(63, 110, 116);">person</span>[<span class="s" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(196, 26, 22);">"name"</span>] <span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">else</span> {</code></li><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;"> <span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">return</span></code></li><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;"> }</code></li></ol>
检测API可用性
<ol class="code-lines" style="background-color: transparent; border: 0px; font-size: 14px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline: 0px; padding: 0px; vertical-align: baseline; counter-reset: li 0; line-height: 1.6em; list-style: none; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif;"><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;"><span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">if</span> <span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">#available</span>(<span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">iOS</span> <span class="m" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(28, 0, 207);">10</span>, <span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">macOS</span> <span class="m" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(28, 0, 207);">10.12</span>, *) {</code></li><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;"> <span class="c" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(0, 131, 18);">// Use iOS 10 APIs on iOS, and use macOS 10.12 APIs on macOS</span></code></li><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;">} <span class="kt" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 51, 145);">else</span> {</code></li><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;"> <span class="c" style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(0, 131, 18);">// Fall back to earlier iOS and macOS APIs</span></code></li><li style="background-color: transparent; border-width: 0px 0px 0px 18px; border-left-style: solid; border-left-color: transparent; outline: 0px; padding-right: 10px; vertical-align: baseline; text-indent: -13px; white-space: pre-wrap; list-style-type: none;"><code class="code-voice" style="background-color: transparent; border: 0px; font-size: 0.85em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; word-wrap: break-word;">}</code></li></ol>
类和结构体(Classes and Structures)
类和结构体对比
定义语法
属性访问
结构体类型的成员逐一构造器
结构体和枚举是值类型
字符串、数组和字典类型的赋值和复制