update 02/20

This commit is contained in:
numbbbbb
2014-06-08 14:33:47 +08:00
parent a0409eb028
commit 24f3fcde95
41 changed files with 286 additions and 59 deletions

View File

@ -46,7 +46,7 @@
<div class="book" data-level="1.1" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="1.1" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_4"> <section class="normal" id="section-gitbook_6">
<h1 id="-swift">关于 Swift</h1> <h1 id="-swift">关于 Swift</h1>
<p>Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受C的兼容性的限制。Swift 使用安全的编程模式并添加了很多新特性这将使编程更简单扩展性更强也更有趣。除此之外Swift 还支持人见人爱的 Cocoa 和 Cocoa Touch 框架。拥有了这些特性Swift将重新定义软件开发。</p> <p>Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受C的兼容性的限制。Swift 使用安全的编程模式并添加了很多新特性这将使编程更简单扩展性更强也更有趣。除此之外Swift 还支持人见人爱的 Cocoa 和 Cocoa Touch 框架。拥有了这些特性Swift将重新定义软件开发。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="1.2" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="1.2" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_5"> <section class="normal" id="section-gitbook_7">
<h1 id="swift-">Swift 初见</h1> <h1 id="swift-">Swift 初见</h1>
<p>本页内容包括:</p> <p>本页内容包括:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="1" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="1" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_6"> <section class="normal" id="section-gitbook_8">
<h1 id="-swift">欢迎使用 Swift</h1> <h1 id="-swift">欢迎使用 Swift</h1>
<p>在本章中您将了解 Swift 的特性和开发历史,并对 Swift 有一个初步的了解。</p> <p>在本章中您将了解 Swift 的特性和开发历史,并对 Swift 有一个初步的了解。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.1" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.1" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_8"> <section class="normal" id="section-gitbook_10">
<h1 id="-">基础部分</h1> <h1 id="-">基础部分</h1>
<p>Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。</p> <p>Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.2" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.2" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_19"> <section class="normal" id="section-gitbook_21">
<h1 id="-">基础运算符</h1> <h1 id="-">基础运算符</h1>
<p>运算符是检查, 改变, 合并值的特殊符号或短语. 例如, 加号 <code>+</code> 把计算两个数的和(如 <code>let i = 1 + 2</code>). 复杂些的运行算包括逻辑与<code>&amp;&amp;</code>(如 <code>if enteredDoorCode &amp;&amp; passedRetinaScan</code>), 还有自增运算符 <code>++i</code> 这样让自身加一的便捷运算.</p> <p>运算符是检查, 改变, 合并值的特殊符号或短语. 例如, 加号 <code>+</code> 把计算两个数的和(如 <code>let i = 1 + 2</code>). 复杂些的运行算包括逻辑与<code>&amp;&amp;</code>(如 <code>if enteredDoorCode &amp;&amp; passedRetinaScan</code>), 还有自增运算符 <code>++i</code> 这样让自身加一的便捷运算.</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.3" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.3" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_9"> <section class="normal" id="section-gitbook_11">
<h1 id="-strings-and-characters-">字符串和字符 (Strings and Characters)</h1> <h1 id="-strings-and-characters-">字符串和字符 (Strings and Characters)</h1>
<p>本页包含内容:</p> <p>本页包含内容:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.4" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.4" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.5" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.5" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.6" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.6" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_12"> <section class="normal" id="section-gitbook_14">
<h1 id="-functions-">函数Functions</h1> <h1 id="-functions-">函数Functions</h1>
<p>本页包含内容:</p> <p>本页包含内容:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.7" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.7" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_13"> <section class="normal" id="section-gitbook_15">
<h1 id="-">闭包</h1> <h1 id="-">闭包</h1>
<p>本页内容包含:</p> <p>本页内容包含:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.8" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.8" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.9" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.9" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_15"> <section class="normal" id="section-gitbook_17">
<h3 id="-">类和结构体</h3> <h3 id="-">类和结构体</h3>
<p>本页包含内容:</p> <p>本页包含内容:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.10" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.10" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.11" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.11" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.12" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.12" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.13" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.13" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.14" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.14" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.15" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.15" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_21"> <section class="normal" id="section-gitbook_23">
<h1 id="-">析构过程</h1> <h1 id="-">析构过程</h1>
<p>在一个类的实例被释放之前析构函数被立即调用。用关键字deinit来标示析构函数类似于初始化函数用init来标示。析构函数只适用于类类型。</p> <p>在一个类的实例被释放之前析构函数被立即调用。用关键字deinit来标示析构函数类似于初始化函数用init来标示。析构函数只适用于类类型。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.16" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.16" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_22"> <section class="normal" id="section-gitbook_24">
<h1 id="-">自动引用计数</h1> <h1 id="-">自动引用计数</h1>
<p>本页包含内容:</p> <p>本页包含内容:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.17" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.17" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_23"> <section class="normal" id="section-gitbook_25">
<h1 id="optional-chaining">Optional Chaining</h1> <h1 id="optional-chaining">Optional Chaining</h1>
<p>可选链Optional Chaining是一种可以请求和调用属性、方法及子脚本的过程它的自判断性体现于请求或调用的目标当前可能为空<code>nil</code>)。如果自判断的目标有值,那么调用就会成功;相反,如果选择的目标为空(<code>nil</code>),则这种调用将返回空(<code>nil</code>)。多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(<code>nil</code>)将导致整个链失效。</p> <p>可选链Optional Chaining是一种可以请求和调用属性、方法及子脚本的过程它的自判断性体现于请求或调用的目标当前可能为空<code>nil</code>)。如果自判断的目标有值,那么调用就会成功;相反,如果选择的目标为空(<code>nil</code>),则这种调用将返回空(<code>nil</code>)。多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(<code>nil</code>)将导致整个链失效。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.18" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.18" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_24"> <section class="normal" id="section-gitbook_26">
<h1 id="-type-casting-">类型检查Type Casting</h1> <h1 id="-type-casting-">类型检查Type Casting</h1>
<p>ps为了方便各位检验所以保留了英文可删。 <p>ps为了方便各位检验所以保留了英文可删。

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.19" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.19" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_25"> <section class="normal" id="section-gitbook_27">
<h1 id="-">类型嵌套</h1> <h1 id="-">类型嵌套</h1>
<p>本页包含内容:</p> <p>本页包含内容:</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.20" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.20" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,6 +587,233 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_28">
<h1 id="-extensions-">扩展Extensions</h1>
<hr>
<p>本页包含内容:</p>
<ul>
<li>扩展语法Extension Syntax</li>
<li>计算属性Computed Properties</li>
<li>构造器Initializers</li>
<li>方法Methods</li>
<li>下标Subscripts</li>
<li>嵌套类型Nested Types</li>
</ul>
<p><em>扩展</em>就是向一个已有的类、结构体或枚举类型添加新功能functionality。这包括在没有权限获取原始源代码的情况下扩展类型的能力<em>逆向建模</em>。扩展和Objective-C中的分类(categories)类似。不过与Objective-C不同的是Swift的扩展没有名字。</p>
<p>Swift中的扩展可以</p>
<ul>
<li>添加计算属性和计算静态属性</li>
<li>定义实例方法和类型方法</li>
<li>提供新的构造器</li>
<li>定义下标</li>
<li>定义和使用新的嵌套类型</li>
<li>使一个已有类型符合某个接口</li>
</ul>
<blockquote>
<p>注意
如果你定义了一个扩展向一个已有类型添加新功能,那么这个新功能对该类型的所有已有实例中都是可用的,即使它们是在你的这个扩展的前面定义的。</p>
</blockquote>
<h2 id="-">扩展语法</h2>
<p>声明一个扩展使用关键字<code>extension</code></p>
<pre><code class="lang-javascript">extension SomeType{
<span class="hljs-comment">// new functionality to add to SomeType goes here</span>
}
</code></pre>
<p>一个扩展可以扩展一个已有类型,使其能够适配一个或多个接口。当这种情况发生时,接口的名字应该完全按照类或结构体的名字的方式进行书写:</p>
<pre><code class="lang-javascript">extension SomeType: SomeProtocol, AnotherProctocol{
<span class="hljs-comment">// implementation of protocol requirments goes here</span>
}
</code></pre>
<p>按照这种方式添加的接口一致性被称之为<strong>给扩展添加接口一致性(Protocal Conformance)</strong></p>
<h2 id="-">计算属性</h2>
<p>扩展可以向已有类型添加计算实例属性和计算类型属性。下面的例子向Swift的内建<code>Double</code>类型添加了5个计算实例属性从而提供与距离单位协作的基本支持。</p>
<pre><code class="lang-javascript">extension Double{
<span class="hljs-keyword">var</span> km: Double { <span class="hljs-keyword">return</span> self * <span class="hljs-number">1</span>_000<span class="hljs-number">.0</span> }
<span class="hljs-keyword">var</span> m : Double { <span class="hljs-keyword">return</span> self }
<span class="hljs-keyword">var</span> cm: Double { <span class="hljs-keyword">return</span> self / <span class="hljs-number">100.0</span> }
<span class="hljs-keyword">var</span> mm: Double { <span class="hljs-keyword">return</span> self / <span class="hljs-number">1</span>_000<span class="hljs-number">.0</span> }
<span class="hljs-keyword">var</span> ft: Double { <span class="hljs-keyword">return</span> self / <span class="hljs-number">3.28084</span> }
}
<span class="hljs-keyword">let</span> oneInch = <span class="hljs-number">25.4</span>.mm
println(<span class="hljs-string">"One inch is \(oneInch) meters"</span>)
<span class="hljs-comment">// prints "One inch is 0.0254 meters"</span>
<span class="hljs-keyword">let</span> threeFeet = <span class="hljs-number">3.</span>ft
println(<span class="hljs-string">"Three feet is \(threeFeet) meters"</span>)
<span class="hljs-comment">// prints "Three feet is 0.914399970739201 meters"</span>
</code></pre>
<p>这些计算属性表达的含义是把一个<code>Double</code>型的值看作是某单位下的长度值。即使它们被实现为计算属性但这些属性仍可以接一个带有dot语法的浮点型字面值而这恰恰是使用这些浮点型字面量实现距离转换的方式。</p>
<p>在上述例子中,一个<code>Double</code>型的值<code>1.0</code>被用来表示“1米”。这就是为什么<code>m</code>计算属性返回<code>self</code>——表达式<code>1.m</code>被认为是计算<code>1.0</code><code>Double</code>值。</p>
<p>其它单位则需要一些转换来表示在米下测量的值。1千米等于1,000米所以<code>km</code>计算属性要把值乘以<code>1_000.00</code>来转化成单位米下的数值。类似地1米有3.28024英尺,所以<code>ft</code>计算属性要把对应的<code>Double</code>值除以<code>3.28024</code>来实现英尺到米的单位换算。</p>
<p>这些属性是只读的计算属性,所有从简考虑它们不用<code>get</code>关键字表示。它们的返回值是<code>Double</code>型,而且可以用于所有接受<code>Double</code>的数学计算中:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> aMarathon = <span class="hljs-number">42.</span>km + <span class="hljs-number">195.</span>m
println(<span class="hljs-string">"A marathon is \(aMarathon) meters long"</span>)
<span class="hljs-comment">// prints "A marathon is 42495.0 meters long"</span>
</code></pre>
<blockquote>
<p>注意
扩展可以添加新的计算属性,但是不可以添加存储属性,也不可以向已有属性添加属性观测器(property observers)。</p>
</blockquote>
<h2 id="-">构造器</h2>
<p>扩展可以向已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。</p>
<blockquote>
<p>注意
如果你使用扩展向一个值类型添加一个构造器该构造器向所有的存储属性提供默认值而且没有定义任何定制构造器custom initializers那么对于来自你的扩展构造器中的值类型你可以调用默认构造器(default initializers)和成员级构造器(memberwise initializers)。
正如在值类型的构造器授权中描述的,如果你已经把构造器写成值类型原始实现的一部分,上述规则不再适用。</p>
</blockquote>
<p>下面的例子定义了一个用于描述几何矩形的定制结构体<code>Rect</code>。这个例子同时定义了两个辅助结构体<code>Size</code><code>Point</code>,它们都把<code>0.0</code>作为所有属性的默认值:</p>
<pre><code class="lang-javascript">struct Size{
<span class="hljs-keyword">var</span> width = <span class="hljs-number">0.0</span>, height = <span class="hljs-number">0.0</span>
}
struct Point{
<span class="hljs-keyword">var</span> x = <span class="hljs-number">0.0</span>, y = <span class="hljs-number">0.0</span>
}
struct Rect{
<span class="hljs-keyword">var</span> origin = Point()
<span class="hljs-keyword">var</span> size = Size()
}
</code></pre>
<p>因为结构体<code>Rect</code>提供了其所有属性的默认值,所以正如默认构造器中描述的,它可以自动接受一个默认的构造器和一个成员级构造器。这些构造器可以用于构造新的<code>Rect</code>实例:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> defaultRect = Rect()
<span class="hljs-keyword">let</span> memberwiseRect = Rect(origin: Point(x: <span class="hljs-number">2.0</span>, y: <span class="hljs-number">2.0</span>),
size: Size(width: <span class="hljs-number">5.0</span>, height: <span class="hljs-number">5.0</span>))
</code></pre>
<p>你可以提供一个额外的使用特殊中心点和大小的构造器来扩展<code>Rect</code>结构体:</p>
<pre><code class="lang-javascript">extension Rect{
init(center: Point, size: Size){
<span class="hljs-keyword">let</span> originX = center.x - (size.width / <span class="hljs-number">2</span>)
<span class="hljs-keyword">let</span> originY = center.y - (size.height / <span class="hljs-number">2</span>)
self.init(origin: Point(x: originX, y: originY), size: size)
}
}
</code></pre>
<p>这个新的构造器首先根据提供的<code>center</code><code>size</code>值计算一个合适的原点。然后调用该结构体自动的成员构造器<code>init(origin:size:)</code>,该构造器将新的原点和大小存到了合适的属性中:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> centerRect = Rect(center: Point(x: <span class="hljs-number">4.0</span>, y: <span class="hljs-number">4.0</span>),
size: Size(width: <span class="hljs-number">3.0</span>, height: <span class="hljs-number">3.0</span>))
<span class="hljs-comment">// centerRect's origin is (2.5, 2.5) and its size is (3.0, 3.0)</span>
</code></pre>
<blockquote>
<p>注意
如果你使用扩展提供了一个新的构造器,你依旧有责任保证构造过程能够让所有实例完全初始化。</p>
</blockquote>
<h2 id="-">方法</h2>
<p>扩展可以向已有类型添加新的实例方法和类型方法。下面的例子向<code>Int</code>类型添加一个名为<code>repetitions</code>的新实例方法:</p>
<pre><code class="lang-javascript">extension Int{
func repetitions(task: () -&gt; ()){
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-number">0.</span>.self{
task()
}
}
}
</code></pre>
<p>这个<code>repetitions</code>方法使用了一个<code>() -&gt; ()</code>类型的单参数single argument表明函数没有参数而且没有返回值。</p>
<p>定义该扩展之后,你就可以对任意整数调用<code>repetitions</code>方法,实现的功能则是多次执行某任务:</p>
<pre><code class="lang-javascript"><span class="hljs-number">3.</span>repetitions({
println(<span class="hljs-string">"Hello!"</span>)
})
<span class="hljs-comment">// Hello!</span>
<span class="hljs-comment">// Hello!</span>
<span class="hljs-comment">// Hello!</span>
</code></pre>
<p>可以使用trailing闭包使调用更加简洁</p>
<pre><code class="lang-javascript"><span class="hljs-number">3.</span>repetitions{
println(<span class="hljs-string">"Goodbye!"</span>)
}
<span class="hljs-comment">// Goodbye!</span>
<span class="hljs-comment">// Goodbye!</span>
<span class="hljs-comment">// Goodbye!</span>
</code></pre>
<h3 id="-">修改实例方法</h3>
<p>通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改<code>self</code>或其属性的方法必须将该实例方法标注为<code>mutating</code>,正如来自原始实现的修改方法一样。</p>
<p>下面的例子向Swift的<code>Int</code>类型添加了一个新的名为<code>square</code>的修改方法,来实现一个原始值的平方计算:</p>
<pre><code class="lang-javascript">extension Int{
mutating func square(){
self = self * self
}
}
<span class="hljs-keyword">var</span> someInt = <span class="hljs-number">3</span>
someInt.square()
<span class="hljs-comment">// someInt is now 9</span>
</code></pre>
<h2 id="-">下标</h2>
<p>扩展可以向一个已有类型添加新下标。这个例子向Swift内建类型<code>Int</code>添加了一个整型下标。该下标<code>[n]</code>返回十进制数字从右向左数的第n个数字</p>
<ul>
<li>123456789[0]返回9</li>
<li>123456789[1]返回8</li>
</ul>
<p>等等</p>
<pre><code class="lang-javascript">extension Int{
subscript(digitIndex: Int) -&gt; Int {
<span class="hljs-keyword">var</span> decimalBase = <span class="hljs-number">1</span>
<span class="hljs-keyword">for</span> _ <span class="hljs-keyword">in</span> <span class="hljs-number">1.</span>..digitIndex{
decimalBase *= <span class="hljs-number">10</span>
}
<span class="hljs-keyword">return</span> (self / decimalBase) % <span class="hljs-number">10</span>
}
}
<span class="hljs-number">746381295</span>[<span class="hljs-number">0</span>]
<span class="hljs-comment">// returns 5</span>
<span class="hljs-number">746381295</span>[<span class="hljs-number">1</span>]
<span class="hljs-comment">// returns 9</span>
<span class="hljs-number">746381295</span>[<span class="hljs-number">2</span>]
<span class="hljs-comment">// returns 2</span>
<span class="hljs-number">746381295</span>[<span class="hljs-number">8</span>]
<span class="hljs-comment">// returns 7</span>
</code></pre>
<p>如果该<code>Int</code>值没有足够的位数即下标越界那么上述实现的下标会返回0因为它会在数字左边自动补0</p>
<pre><code class="lang-javascript"><span class="hljs-number">746381295</span>[<span class="hljs-number">9</span>]
<span class="hljs-comment">//returns 0, 即等同于:</span>
<span class="hljs-number">0746381295</span>[<span class="hljs-number">9</span>]
</code></pre>
<h2 id="-">嵌套类型</h2>
<p>扩展可以向已有的类、结构体和枚举添加新的嵌套类型:</p>
<pre><code class="lang-javascript">extension Character {
enum Kind {
<span class="hljs-keyword">case</span> Vowel, Consonant, Other
}
<span class="hljs-keyword">var</span> kind: Kind {
<span class="hljs-keyword">switch</span> <span class="hljs-built_in">String</span>(self).lowercaseString {
<span class="hljs-keyword">case</span> <span class="hljs-string">"a"</span>, <span class="hljs-string">"e"</span>, <span class="hljs-string">"i"</span>, <span class="hljs-string">"o"</span>, <span class="hljs-string">"u"</span>:
<span class="hljs-keyword">return</span> .Vowel
<span class="hljs-keyword">case</span> <span class="hljs-string">"b"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-string">"d"</span>, <span class="hljs-string">"f"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"j"</span>, <span class="hljs-string">"k"</span>, <span class="hljs-string">"l"</span>, <span class="hljs-string">"m"</span>,
<span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"q"</span>, <span class="hljs-string">"r"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"t"</span>, <span class="hljs-string">"v"</span>, <span class="hljs-string">"w"</span>, <span class="hljs-string">"x"</span>, <span class="hljs-string">"y"</span>, <span class="hljs-string">"z"</span>:
<span class="hljs-keyword">return</span> .Consonant
<span class="hljs-keyword">default</span>:
<span class="hljs-keyword">return</span> .Other
}
}
}
</code></pre>
<p>该例子向<code>Character</code>添加了新的嵌套枚举。这个名为<code>Kind</code>的枚举表示特定字符的类型。具体来说,就是表示一个标准的拉丁脚本中的字符是元音还是辅音(不考虑口语和地方变种),或者是其它类型。</p>
<p>这个类子还向<code>Character</code>添加了一个新的计算实例属性,即<code>kind</code>,用来返回合适的<code>Kind</code>枚举成员。</p>
<p>现在,这个嵌套枚举可以和一个<code>Character</code>值联合使用了:</p>
<pre><code class="lang-javascript">func printLetterKinds(word: <span class="hljs-built_in">String</span>) {
println(<span class="hljs-string">"'\\(word)' is made up of the following kinds of letters:"</span>)
<span class="hljs-keyword">for</span> character <span class="hljs-keyword">in</span> word {
<span class="hljs-keyword">switch</span> character.kind {
<span class="hljs-keyword">case</span> .Vowel:
print(<span class="hljs-string">"vowel "</span>)
<span class="hljs-keyword">case</span> .Consonant:
print(<span class="hljs-string">"consonant "</span>)
<span class="hljs-keyword">case</span> .Other:
print(<span class="hljs-string">"other "</span>)
}
}
print(<span class="hljs-string">"\n"</span>)
}
printLetterKinds(<span class="hljs-string">"Hello"</span>)
<span class="hljs-comment">// 'Hello' is made up of the following kinds of letters:</span>
<span class="hljs-comment">// consonant vowel consonant consonant vowel</span>
</code></pre>
<p>函数<code>printLetterKinds</code>的输入是一个<code>String</code>值并对其字符进行迭代。在每次迭代过程中,考虑当前字符的<code>kind</code>计算属性,并打印出合适的类别描述。所以<code>printLetterKinds</code>就可以用来打印一个完整单词中所有字母的类型,正如上述单词<code>&quot;hello&quot;</code>所展示的。</p>
<blockquote>
<p>注意
由于已知<code>character.kind</code><code>Character.Kind</code>型,所以<code>Character.Kind</code>中的所有成员值都可以使用<code>switch</code>语句里的形式简写,比如使用 <code>.Vowel</code>代替<code>Character.Kind.Vowel</code></p>
</blockquote>
</section>
</div> </div>
</div> </div>
</div> </div>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.21" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.21" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.22" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.22" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_28"> <section class="normal" id="section-gitbook_31">
<h1 id="-">泛型</h1> <h1 id="-">泛型</h1>
<hr> <hr>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2.23" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2.23" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="2" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="2" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_32"> <section class="normal" id="section-gitbook_35">
<h1 id="swift-">Swift 教程</h1> <h1 id="swift-">Swift 教程</h1>
<p>本章介绍了 Swift 的各种特性及其使用方法,是全书的核心部分。</p> <p>本章介绍了 Swift 的各种特性及其使用方法,是全书的核心部分。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.1" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.1" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -587,7 +587,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_34"> <section class="normal" id="section-gitbook_37">
<h1 id="-">关于语言附注</h1> <h1 id="-">关于语言附注</h1>
<p>本书的这一节描述了Swift编程语言的形式语法。这里描述的语法是为了帮助您更详细的了解该语言而不是让您直接实现一个解析器或编译器。</p> <p>本书的这一节描述了Swift编程语言的形式语法。这里描述的语法是为了帮助您更详细的了解该语言而不是让您直接实现一个解析器或编译器。</p>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.2" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.2" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.3" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.3" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.4" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.4" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.6" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.6" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.7" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.7" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.8" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.8" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.9" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.9" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -44,7 +44,7 @@
<div class="book" data-level="3.10" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.10" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3.5" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3.5" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -46,7 +46,7 @@
<div class="book" data-level="3" data-basepath=".." data-revision="1402203233229"> <div class="book" data-level="3" data-basepath=".." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>

View File

@ -44,7 +44,7 @@
<div class="book" data-level="0" data-basepath="." data-revision="1402203233229"> <div class="book" data-level="0" data-basepath="." data-revision="1402209202237">
<div class="book-header"> <div class="book-header">
<!-- Actions Left --> <!-- Actions Left -->
<a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a> <a href="#" class="btn pull-left toggle-summary" aria-label="Toggle summary"><i class="fa fa-align-justify"></i></a>
@ -585,7 +585,7 @@
<div class="page-inner"> <div class="page-inner">
<section class="normal" id="section-gitbook_3"> <section class="normal" id="section-gitbook_5">
<h1 id="swift-">Swift 编程语言</h1> <h1 id="swift-">Swift 编程语言</h1>
<p>Swift 是苹果在 WWDC 2014 上发布的一款全新的编程语言,本书译自苹果官方的 Swift 教程《The Swift Programming Language》。</p> <p>Swift 是苹果在 WWDC 2014 上发布的一款全新的编程语言,本书译自苹果官方的 Swift 教程《The Swift Programming Language》。</p>

View File

@ -1,5 +1,5 @@
CACHE MANIFEST CACHE MANIFEST
# Revision 1402203233230 # Revision 1402209202238
CACHE: CACHE:
index.html index.html

File diff suppressed because one or more lines are too long