天天看點

[譯] Swift + 關鍵字(V 3.0.1)

<b>本文講的是[譯] Swift + 關鍵字(V 3.0.1),</b>

有句話以前說過,現在我要再次提一下,一個優秀的匠人,他(她)的工具同樣優秀。當我們一絲不苟地去使用這些工具時,它們就會帶我們到想去的地方,或者完成我們的夢寐以求的作品。

有一些是很簡單的,有一些是晦澀難懂的,也有一些是有點能認出來的。但是他們都很值得閱讀和學習,這會很漫長,準備好了嗎?

現在,讓我們嗨起來~

associatedtype:通常作為協定的一部分,為一種類型提供一個占位符。在協定未被遵守之前,這個類型都是未知的。

class:一個建構程式代碼的通用且靈活的基礎結構。和 struct 有些相似,除了:

繼承。允許一個類繼承另一個類的特性。

類型轉換。允許你在運作時檢查并解釋一個類的執行個體的類型。

析構器。允許一個類的執行個體釋放它配置設定的任何資源。

引用計數。允許類的執行個體有多個引用。

deinit:在類的執行個體被釋放前馬上調用。

enum:為一組相關值定義通用類型,并使你能夠在代碼中以類型安全的方式使用這些值。在 Swift 中,它們屬于第一類類型,并且可以使用一些特性,這些特性在其他語言裡往往隻有類才支援。

extension:允許為現有的類、結構體、枚舉或協定添加新的功能。

fileprivate:通路控制結構,将作用域限制在源檔案。

func : 執行一個特定的自包含的代碼塊。

import:将一個已建構的架構或應用,作為一個單元暴露給指定的二進制檔案。

init : 構造一個類、結構體或枚舉的執行個體的過程。

inout:傳遞給函數一個值,然後修改它,它會被傳回原來的位置來代替原始值。适用于引用類型和值類型。

internal:通路控制結構,允許實體在它定義子產品的任何源檔案中使用,但不能在其外部的源檔案中使用。

let:定義一個不可變的變量。

open:通路控制結構,允許對象在定義的子產品之外被通路或子類化。對于成員,外部子產品也是可以通路和覆寫的。

operator:一個用來檢查、更改或合并值的特殊符号或短語。

private:通路控制結構,把實體的作用域限制在聲明的位置。

protocol:定義适合特定任務或部分功能的類、屬性和其他需求的藍圖。

public:通路控制結構,允許對象在被定義的子產品内部通路或子類化,對于成員,也隻可以在定義的子產品内部可以通路和覆寫。

static:定義該類型自己的調用方法。也用于定義其靜态成員。

struct:一個建構程式代碼的通用且靈活的基礎結構,也提供了成員的初始化方法。和<code>class</code> 不同,他們在代碼中被傳遞的時候,永遠複制,而不會啟動自動引用計數。另外,他們也不能:

使用繼承。

在運作時進行類型轉換。

擁有或者使用析構器。

subscript:通路集合、清單或者序列的快捷方式。

typealias:将現有的類型的命名作為别名。

var:定義一個可變的變量。

break:在結束一個循環,或者在 <code>if</code>、<code>switch</code> 中使用。

case:求值,然後和 <code>switch</code> 提供的類型來比較的語句。

continue:結束循環語句的目前疊代,但是不終止循環語句的繼續執行。

default:用來覆寫在 <code>case</code> 結構中未被明确定義的值。

defer:用來執行在程式控制轉移到作用域之外之前的代碼。

do:一個前置語句,用來處理一塊代碼運作的錯誤。

else:與 <code>if</code> 語句聯合使用,當條件為真時執行代碼的一部分,當相同的條件為假的時候執行另一部分。

fallthrough:在 <code>switch</code> 語句中,明确允許一個 case 執行完繼續執行下一個。

for:對序列進行疊代,例如數字的範圍、數組中的項或字元串裡的字元。和 <code>in</code> 關鍵字配對

guard:在不滿足一個或多個條件的情況下,将程式控制轉移到作用域之外,同時還可以拆包任何可選類型。

if:根據一個或者多個條件的值來執行代碼。

in:對序列進行疊代,例如數字的範圍、數組中的項或字元串裡的字元。和 <code>for</code> 關鍵字配對

repeat:在考慮循環條件之前,執行一次循環裡的内容。

return:立即打斷目前上下文的控制流,另外傳回一個得到的值(如果存在的話)。

and

switch:考慮一個值,并與幾種可能的比對模式進行比較。然後根據成功比對的第一個模式,執行合适的代碼塊。

where:要求關聯的類型必須符合一個特定的協定,或者和某些特定的參數類型相同。它也用于提供一個額外的控制條件,來判斷一個模式是否符合控制表達式。where 子句可以在多個上下文中使用,這些例子是 where 作為從句和模式比對的主要用途。

以及

while:執行一組語句,直到條件變為 `false'。

Any:可以用來表示任何類型的執行個體,包括函數類型。

as:類型轉換運算符,用于嘗試将值轉換成不同的、預期的和特定的類型。

false:Swift 中用于表示邏輯類型 — 布爾類型的兩個值之一,代表非真。

is:類型檢查運算符,用來識别一個執行個體是否是特定的類型。

nil:表示 Swift 中任何類型的無狀态的值。和 Objective-C 的 nil 不同,它是一個指向不存在對象的指針。

rethrows:表明僅當該函數的一個函數類型的參數抛出錯誤時,該函數才抛出錯誤。

super:公開的通路父類屬性、方法或别名。

self:每個類型執行個體的隐含屬性,它完全等于執行個體本身。在差別函數參數名和屬性名時非常有用。

Self:在協定裡,代表最終符合給定協定的類型。

throw:從目前上下文直接抛出一個錯誤。

throws:表示一個函數、方法或初始化方法可能會抛出一個錯誤。

true:Swift 中用于表示邏輯類型 — 布爾類型的兩個值之一,代表真。

try:表示接下來的函數可能會抛出一個錯誤。有三種不同的用法:try、try? 和 try!。

_:通配符,比對并忽略任何值。

another use

#available:<code>if</code>、<code>while</code> 和 <code>guard</code> 語句的條件,根據特定的平台,來在運作時查詢 API 的可用性。

#colorLiteral:playground 字面量,傳回一個可互動的顔色選擇器來指派給一個變量。

#column:特殊的文字表達式,傳回它開始位置的列數。

#else:編譯條件控制語句,允許程式條件編譯一些指定的代碼。與 <code>#if</code> 語句結合使用,當條件為真時執行代碼的一部分,當相同的條件為假時執行另一部分。

#elseif:條件編譯控制語句,允許程式條件編譯一些指定的代碼。與 <code>#if</code> 語句結合使用,在給出的條件為真時,執行這部分的代碼。

#endif:條件編譯控制語句,允許程式條件編譯一些指定的代碼。用于标記結束需要條件編譯的代碼。

#file:特殊的文字表達式,傳回這個檔案的名稱。

#fileReference:playground 字面量,傳回一個選擇器來選擇檔案,然後作為一個 <code>NSURL</code> 執行個體傳回。

#function:特殊的文字表達式,用來傳回一個函數的名稱,如果在方法裡,它傳回方法名,如果在屬性的 getter 或者 setter 裡,它傳回屬性的名稱,如果在特殊的成員,比如 <code>init</code> 或者 <code>subscript</code>裡,它傳回關鍵字,如果在檔案的頂部,那它傳回目前子產品的名稱。

#if:條件編譯控制語句,允許程式條件編譯一些指定的代碼。根據一個或多個條件來判斷是否執行代碼。

#imageLiteral:playground 字面量,傳回一個選擇器來選擇圖檔,然後作為一個 <code>UIImage</code> 執行個體傳回。

#line:特殊的文字表達式,傳回它所在位置的行數。

#selector:構成 Objective-C 選擇器的表達式,它使用靜态檢查來確定該方法存在,并且它也暴露給 Objective-C。

#sourceLocation:用于指定行數和檔案名的行控制語句,該行數和檔案名可能和正在編譯的源代碼的行數和檔案名不同。适用于診斷和調試時,更改源代碼的位置。

如果這些關鍵字在它們各自的上下文之外使用,則它們實際上可以作為辨別符

associativity:指定如何在沒有使用 <code>left</code>、<code>right</code> 或 <code>none</code> 分組括号的情況下,将具有相同優先級級别的運算符組合在一起。

convenience:類中的輔助初始化器,最終會把執行個體的初始化委托給特定的初始化器。

dynamic:表示對該成員或函數的通路從未被編譯器内聯或虛拟化,這意味着對該成員的通路始終使用 Objective-C 運作時來動态(而非靜态)派發。

didSet:屬性觀察,在屬性存入一個值後立即調用。

final:阻止方法、屬性或者下标被繼承。

get:傳回成員給定的值。也用于計算屬性,可以間接地擷取其他屬性和值。

infix:用于兩個目标之間的特定運算符。如果一個新的全局運算符被定義為中置運算符,那它還需要成員之間的優先級組。

indirect:表示枚舉将另一個枚舉的執行個體作為一個或多個枚舉的關聯值。

lazy:屬性的初始值在第一次使用時再計算。

left:指定操作符的關聯順序為從左到右,這樣在沒有分組括号的情況下,相同優先級的也會被正确的分到一組。

mutating:允許在特定的方法中,對結構體或枚舉的屬性進行修改。

none:運算符沒有提供任何關聯性,這限制了相同優先級運算符的出現間隔。

nonmutating:指定成員的 setter 不會修改它包含的執行個體,但是可以有其他的目的。

optional:用于描述協定中的可選方法。這些方法不必由符合協定的類型來實作。

override:表示子類将提供自己的執行個體方法、類方法、執行個體屬性,類屬性或下标的自定義實作,否則它将從父類繼承。

postfix:指定操作符在它操作的目标之後。

precedence:表示一個操作符的優先級高于其他,是以這些運作符先被應用。

prefix:指定操作符在它的操作的目标之前。

required:強制編譯器確定每個子類都必須實作給定的初始化器。

right:指定操作符的關聯順序為從右到左,這樣在沒有分組括号的情況下,相同優先級的也會被正确的分到一組。

set:擷取成員的值來作為它的新值。也可用于計算屬性,間接地設定其他屬性和值。如果一個計算屬性的 setter 沒有定義一個名字來代表要設定的新值,那麼預設新值的名字為<code>newValue</code>。

Type:代指任何類型的類型,包括類的類型、結構體的類型、枚舉類型和協定類型。

unowned:在循環引用中,一個執行個體引用另一個執行個體,在另一個執行個體具有相同的生命周期或更長的生命周期時,不會對它強持有。

weak:在循環引用中,一個執行個體引用另一個執行個體,在另一個執行個體具有較短生命周期時,不會對它強持有。

willSet:屬性觀察,在屬性即将存入一個值之前調用。

呼!

這是一個有趣的創作。我選了一些我以前沒有真正仔細思考的東西寫,但是我認為這些技巧是不需要像要考試的清單一樣記住的。

更好的是,随時帶着這個清單。讓它随時的刺激着你的腦波,這樣在你需要使用一些特定的關鍵字的時候,你就會知道它,然後使用它。

<b></b>

<b>原文釋出時間為:2017年3月08日</b>

<b>本文來自雲栖社群合作夥伴掘金,了解相關資訊可以關注掘金網站。</b>

繼續閱讀