1. 程式人生 > >swift中常用關鍵字和標識

swift中常用關鍵字和標識

******extention:擴充套件

********@escaping

閉包只有在函式中做引數時才會區分逃逸閉包和非逃逸閉包。

Swift 3.0之後,傳遞閉包到函式中的時候,系統會預設為非逃逸閉包型別(NonescapingClosures)@noescaping,逃逸閉包在閉包前要新增@escaping關鍵字。

從生命週期看兩者區別:

非逃逸閉包的生命週期與函式相同:

1,把閉包作為引數傳給函式;

2,函式中呼叫閉包;

3,退出函式。結束


逃逸閉包的生命週期:

1,閉包作為引數傳遞給函式;

2,退出函式;

3,閉包被呼叫,閉包生命週期結束

即逃逸閉包的生命週期長於函式,函式退出的時候,逃逸閉包的引用仍被其他物件持有,不會在函式結束時釋放
 

********@ discardableResult

swift正常的方法如果有返回值的話,呼叫的時候必須有一個接收方,否則的話編譯器會報一個警告,如果在方法前加上 @discardableResult 不處理的時候就不會有警告了。也可以用一個萬用字元接收方法返回值,可以達到同樣的目的。https://blog.csdn.net/zx416632112/article/details/79015608

呼叫函式的時候忽略返回值,不會產生編譯警告,所以函式被標註為@ discardableResult屬性。

*********final

你可以通過把方法,屬性或下標標記為final來防止它們被重寫,只需要在宣告關鍵字前加上final

修飾符即可.你可以通過在關鍵字class前新增final修飾符(final class)來將整個類標記為 final 的。這樣的類是不可被繼承的,試圖繼承這樣的類會導致編譯報錯.

*********indirect

你可以在列舉成員前加上indirect來表示該成員可遞迴

*********defer

使用defer語句在即將離開當前程式碼塊時執行一系列語句。該語句讓你能執行一些必要的清理工作,不管是以何種方式離開當前程式碼塊的——無論是由於丟擲錯誤而離開,或是由於諸如returnbreak的語句。例如,你可以用defer語句來確保檔案描述符得以關閉,以及手動分配的記憶體得以釋放。

defer語句將程式碼的執行延遲到當前的作用域退出之前。該語句由defer關鍵字和要被延遲執行的語句組成。延遲執行的語句不能包含任何控制轉移語句,例如breakreturn語句,或是丟擲一個錯誤。延遲執行的操作會按照它們宣告的順序從後往前執行——也就是說,第一條defer語句中的程式碼最後才執行,第二條defer語句中的程式碼倒數第二個執行,以此類推。最後一條語句會第一個執行

******option

在協議中使用 optional 關鍵字作為字首來定義可選要求

****require

必須的

******@objc

可選要求用在你需要和 Objective-C 打交道的程式碼中。協議和可選要求都必須帶上@objc屬性。標記 @objc 特性的協議只能被繼承自 Objective-C 類的類或者 @objc 類遵循,其他類以及結構體和列舉均不能遵循這種協議。